以下汇编代码应该反转输入字符串,但它不会,它只打印字符串数据。
.model small
.data
str1 db 13,10,'-Enter String: $'
str2 db 13,10,'-your reverse string: $'
t db ?
str3 db 100 dup('$')
str4 db 13,10,'-Your string: $'
.code
main proc
s:
mov ax,@data
mov ds,ax
;get string
mov ah,9
lea dx,str1
int 21h
mov ah,0ah
lea dx ,str3
int 21h
;get lenght
mov bl,str3+1
add bl,30h
mov ah,02h
mov dl,bl
int 21h
mov [di],bl
;print entered string
mov ah,9
lea dx,str4
int 21h
mov ah,9
lea dx,str3+2
int 21h
;print reverse string
mov ah,9
lea dx,str2
int 21h
mov cx,0
lea si,str3+ [di]
dec si
mov cl,[si]
l1:
mov ah,02h
mov dl,[si]
dec si
int 21h
jne l1
main endp
end
答案 0 :(得分:2)
str3 db 100 dup('$')
您没有为DOS输入功能设置数据结构。现在它似乎有效,因为字符 $ 的值为36.由于您将输入的长度显示为单个字符,我建议您写一下:
str3 db 9,0,10 dup('$')
当您获得长度并显示它时,您应该将长度存储在DI(而不是角色)
中 ;get length
mov bl, str3+1
mov dl, bl
add dl, 30h
mov ah, 02h
int 21h
mov bh, 0
mov di, bx
因为您输入的文字从 str3 + 2 开始,您需要更改LEA
。更好地使用DI作为循环计数器,它已经具有长度。
lea si, str3 + 2 + [di]
l1:
dec si
mov dl, [si]
mov ah, 02h
int 21h
dec di
jne l1