装配中的就地反向字符串

时间:2014-10-15 08:45:36

标签: assembly x86

我的代码有问题。我在终端弹出窗口中看不到结果。我需要在相同的内存中反转字符串。请帮我这个代码。

 text db 'some dec/hex/bin here'
 change db 26 dup('?')

 Begin:
    lea si, text
    lea di, change 
    mov cx, 26
 changes:
    mov al, [si]+26
    mov [di], al
    dec si  
    inc di            
 loop changes 
    lea si, text
    lea di, change 
    mov cx, 26
 back:
    mov al, [di]
    mov [si], al
    inc di
    inc si 
    loop back
 Print:
    mov ah, 09h
    lea dx, text 
    int 10h
 Ending:
    mov ax, 4c00h
    int 21h
 End Begin

1 个答案:

答案 0 :(得分:0)

TEXT只有21个字符mov al,[si]+26读取它的方式! 您错误地使用int 10h进行打印!应该是int 21h
您还需要 $ 才能正确终止字符串。

我不会将此就地反转称为因为您正在使用单独的缓冲区。考虑使用两个指针,每个指针在一个末端初始化并向TEXT中间移动。