Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 用另一个字符串替换某些字符串_String_Assembly_X86 16_Tasm - Fatal编程技术网

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