看板 CSIE_ASM 關於我們 聯絡資訊
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
pcedwin:134不是台大 12/17 23:40