2011-01-22 47 views
0

我剛開始玩弄masm。我不明白爲什麼這個代碼不起作用。將字符串中的所有值更改爲'm'

.data 
MsgBoxCaption db "Iczelion Tutorial No.2",0 
MsgBoxText  db "Win32 Assembly is Great!",0 
savedAddr DWORD ? 

.code 
start: 
mov eax, 10 
mov savedAddr, OFFSET MsgBoxText 

lab: 
inc MsgBoxText 
MOV MsgBoxText, 'm' 
cmp eax, 0 
dec eax 
jnz lab 

invoke MessageBox, NULL, savedAddr, addr MsgBoxCaption, MB_OK 
invoke ExitProcess, NULL 
end start 

編輯:我希望看到MsgBoxText的前10個字符是'米的。相反,只有第一個字母是'm'。我假定公司MsgBoxText增加一個指針。

+0

什麼是預期的輸出和你有什麼看呢? – Maz

+0

@Maz:謝謝你指出,我更新了我的帖子來回答你的問題。 – returneax

回答

1

乍一看,似乎這樣的代碼應該什麼都不做,除了「W」的的Win32更改爲「A」,然後到一個單一的「M」。

您正在遞增內存中的單詞MsgBoxText,即每個循環迭代中的相同單詞。

要使用'm'字符來打破字符串,更好的策略是將字符串的地址加載到寄存器中,開始存儲'm'個字節,然後將該寄存器中的值遞增爲以及減少櫃檯。

更新:好吧,回答在評論的問題,改變環路:

lea esi, MsgBoxText 
    mov bl, 'm' 
lab: 
    mov [esi], bl 
    inc esi 
    cmp eax, 0 
    dec eax 
    jnz lab 
+0

那麼這將是一個代碼示例是什麼?這實際上是我與MASM的第一次練習。 – returneax

+0

查看更新的答案... – DigitalRoss

相關問題