assemblyx86masmirvine32

How do I replace last characters with 0?


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

From next data

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

I got this output:

gnirts ecruos eht si sihT#^^^^

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?


Solution

  • Before

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

    After

    This is the source string0
    %%%0
    gnirts ecruos eht si sihT#
    ^^^^
    

    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