assembly 如何将最后一个字符替换为0?

vwoqyblh  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(125)

到目前为止我已经得到了这个:

mov esi,0                       
mov edi,LENGTHOF source - 2     
mov ecx,SIZEOF source
L1:;iterate a loop
    mov al,source[esi]  
    mov target[edi],al          
    inc esi                 
    dec edi                 
    loop L1

从下一个数据

source BYTE "This is the source string",0
       BYTE 4 DUP('%')
target BYTE SIZEOF source DUP('#')
       BYTE 4 DUP('^')

我得到了以下输出:

gnirts ecruos eht si sihT#^^^^

目标字符串的末尾不应该有这些字符。我想我需要找到需要为零的字节并设置它。我该怎么做呢?

balp4ylt

balp4ylt1#

之前

This is the source string0
%%%%
##########################
^^^^

之后

This is the source string0
%%%0
gnirts ecruos eht si sihT#
^^^^
  • 由于mov ecx,SIZEOF source,循环的迭代次数过多!请查看第4个“%”是如何被0覆盖的。
  • LENGTHOF source计算字符和终止零。LENGTHOF source - 1将指向您需要在 target 中写入新终止零的偏移量。

这是循环的另一个版本,它避免了使用慢的loop指令:

mov  ecx, LENGTHOF source - 1  ; destination offset
    xor  ebx, ebx                  ; source offset
    mov  al, 0                     ; terminating zero
L1: mov  target[ecx], al
    dec  ecx
    mov  al, source[ebx]    
    inc  ebx
    test al, al                    ; until we reach terminator
    jnz  L1

相关问题