Home > Enterprise >  How do I replace last characters with 0?
How do I replace last characters with 0?

Time:07-20

I have got this so far:

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

The target string should not have those characters at the end. I think I need to find the byte that needs to be zero and set it. How do I do that?

CodePudding user response:

Before

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

After

This is the source string0
%%%0
gnirts ecruos eht si sihT#
^^^^
  • Because of mov ecx,SIZEOF source, the loop has one iteration too many! See how that 4th '%' was overwritten by 0.

  • LENGTHOF source tallies the characters and the terminating zero. LENGTHOF source - 1 will point at the offset where you need to write the new terminating zero in the target.

This is another version of the loop, one that avoids using the slow loop instruction:

    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
  • Related