我正在尝试在程序集中反转字符串,但它没有工作它不读取字符串的字符! 请帮忙,它只打印任何字符的$$$$$。我想写什么!
.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
答案 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