Re: [請益] 關於 writestring 奇怪問題
wrtiestring 應是以null為結尾的byte string.
所以 add esi, type source 是危險的, 最後沒留 null 字元的空間
inc esi 也很怪, 只填了 source 預留的 40 bytes 中的前 10 個 byte
assume MASM 幫你 initialize source 40 個 bytes 為 0, 則 inc esi
的結果當然是 10 個 'A'
至於 add esi, type source, 可能是因為前 4 個 bytes 填入 XX 00 00 00
(assume little endian and XX 是 A 的 ASCII code)
writestring 的結果就會是 A
以上純屬推測, 我想 debug 看一下 source 的記憶體內容就知道正確結果,
有錯請幫忙更正
另外, 請問你是本課程的修課學生嗎? '敝校教授'中的'敝校'是指?
※ 引述《Jimmy0398 ()》之銘言:
: 之前寫一個簡單的小程式,要產生10個隨機英文字母到字串中。
: 可是我發現有點問題,和觀念有點初入。翻書沒獲得簡答...以下是Code
: -------------------------------------------
: Include Irvine32.inc
: .data
: source dword 10 dup(0)
: .code
: main proc
: mov ecx,10
: mov esi,0
: L1 :
: mov source[esi],'A'
: inc esi ; Correct
: add esi,type source ; Error
: Loop L1
: mov edx,offset source
: call writestring
: exit
: ---------------------------------------------
: 這個程式是剛剛打過精簡版的,之前的被測試到不成樣子。
: 如果是執行黃色那條(inc 1 byte ) 可以完整印出10個 A
: 反之紅色的話(add 4 bytes) 反而會出錯! 只印一個 A
: 以正常陣列來說,應該是增加一個資料型態(Type or 4)
: 可是這個程式,不管資料型態如何。都只能用 Inc ESI
: PS.(mov esi,offset source 一樣一次只可加 1 byte)
: 因為試了很久沒答案,拿去問敝校教授:說不清楚怎麼會這樣OTZ
: 不知道是不是 WRITESTRING 的問題
: 希望能有人幫解惑了 感恩~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.120.43
推
12/17 23:40, , 1F
12/17 23:40, 1F
討論串 (同標題文章)