String 用另一个字符串替换某些字符串
我对汇编语言不熟悉,我正在尝试将字符*、#和&替换为?但我不知道我在做什么。如何更换它?我试图寻找解决办法,但很难找到String 用另一个字符串替换某些字符串,string,assembly,x86-16,tasm,String,Assembly,X86 16,Tasm,我对汇编语言不熟悉,我正在尝试将字符*、#和&替换为?但我不知道我在做什么。如何更换它?我试图寻找解决办法,但很难找到 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 您发布的代码不应在没有错误(或至少警告)的情况下汇编,因为您定义了两次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
您发布的代码不应在没有错误(或至少警告)的情况下汇编,因为您定义了两次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