用汇编语言反转输入字符串

时间:2015-05-03 16:58:05

标签: assembly

我正在尝试在程序集中反转字符串,但它没有工作它不读取字符串的字符! 请帮忙,它只打印任何字符的$$$$$。我想写什么!

.model small
.stack 100h
.data
input db 10 dup ('$')
output db 10 dup('$')

.code
main proc

mov ax , @data
mov ds , ax 
mov bx , offset input
mov cx , 0

l1:
    mov ah , 1
    int 21h
    mov [bx] , al
    inc bx 
    inc cx
    cmp al , 13
    jne l1

    mov dx , offset input
    mov ah , 9 
    int 21h

    mov si , cx

    ou:
    mov dl , [bx+si]
    mov ah , 2
    int 21h
    dec bx
    dec cx 
    cmp cx   , 1
    jne ou


mov ax, 4c00h
int 21h

main endp
end main    

2 个答案:

答案 0 :(得分:0)

您可以使用这个非常简单的例程来完成这项工作:

strrev:
  mov al, [si]
  mov [di], al
  dec si
  inc di
  loop strrev
  ret

它接受cx中字符串内的字符数,si中输入字符串的最后一个字符的地址,以及{{1}中新字符串的缓冲区地址}}。调用它,然后使用di显示反转的字符串。使用Int 21/AH=09h终止输出字符串留给调用者。

答案 1 :(得分:0)

data segment
    string1 db 'CBITA'
    length equ ($-string1)

    string2 db ?
data ends
code segment 
    assume cs:code ds:data es:data
    start:
       mov ax,data
       mov ds,ax   
       lea si,string1
       lea di,string2


       mov cx,length  

       add si,cx


       add si,-1    
    cld


 strrev:
  mov al, [si]
  mov [di], al
  dec si
  inc di  
  dec cx
  jnz strrev


            hlt   

            code ends
            end start