用另一个替换一些字符串字符
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
我是汇编语言的新手,我正在尝试将字符 *、# 和 & 替换为 ?但我不知道我在做什么。我该如何更换它?我尝试寻找解决方案,但很难找到。
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