我刚刚开始玩masm。我不明白为什么这段代码不起作用。
.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'。相反,只有第一个字母是'm'。我假设inc MsgBoxText递增一个指针。
答案 0 :(得分:1)
乍一看,似乎此代码除了将 Win32 的“ W”更改为'a'之外什么都不做到一个'm'。
在每个循环迭代中,您正在MsgBoxText
内存中增加相同单词的单词。
要使用'm'字符来破坏字符串,更好的策略是将字符串的地址加载到寄存器中,开始存储'm'字节,然后增加值登记册,以及递减计数器。
更新:好的,要回答评论中的问题,请将循环更改为:
lea esi, MsgBoxText
mov bl, 'm'
lab:
mov [esi], bl
inc esi
cmp eax, 0
dec eax
jnz lab