将字符串中的所有值更改为“m”

时间:2011-01-22 03:44:21

标签: masm

我刚刚开始玩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递增一个指针。

1 个答案:

答案 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