用另一个替换一些字符串字符

Replacing some string characters with another one

我是汇编语言的新手,我正在尝试将字符 *、# 和 & 替换为 ?但我不知道我在做什么。我该如何更换它?我尝试寻找解决方案,但很难找到。

K: cmp m3[di], "*"
jb K1
K: cmp m3[di], "&"
jb K1
cmp m3[di], "#"
ja K1
mov m3[di], "?"
K1: inc di
loop K

您发布的代码应该 assemble 没有错误(或至少是警告),因为您定义了两次 K 标签!

您的代码确实在 m3 字符串上循环。没关系。但是,当您与其中一个字符(#、&、*)进行比较时,您应该使用 je (JumpIfEqual) 或 jne (JumpIfNotEqual) 条件跳转进行分支。

接下来是应用此代码的代码:

K:        cmp  byte ptr m3[di], "#"  ; ASCII 35
          je   Change
          cmp  byte ptr m3[di], "&"  ; ASCII 38
          je   Change
          cmp  byte ptr m3[di], "*"  ; ASCII 42
          jne  NoChange
Change:   mov  byte ptr m3[di], "?"  ; ASCII 63
NoChange: inc  di
          loop K

这是一个更好的版本,它不会连续读取相同的内存字节,而是用更快的指令对 dec cx jnz K:

替换慢速 loop K 指令
K:        mov  al, m3[di]
          cmp  al, "#"               ; ASCII 35
          je   Change
          cmp  al, "&"               ; ASCII 38
          je   Change
          cmp  al, "*"               ; ASCII 42
          jne  NoChange
Change:   mov  byte ptr m3[di], "?"  ; ASCII 63
NoChange: inc  di
          dec  cx
          jnz  K