.model small
.data
string db 'hap$'
.stack 200h
.code
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,@data
mov ds,ax
mov bx,offset string
push bx
call reverse
pop bx
mov dl,[bx]
mov ah,2
int 21h
ret
main endp
;-------------------------
reverse proc near
push ax
push bx
push dx
push bp
mov bp,sp
mov bx,[bp+10]
mov al,[bx]
cmp al,'$'
jne re_call
jmp return
re_call:
inc bx
push bx
call reverse
pop bx
mov dl,[bx]
mov ah,2
int 21h
return:
pop bp
pop dx
pop bx
pop ax
ret
reverse endp
;---------------------------------------
end start
为什么最后一个‘$’也输出来了?
------解决方案--------------------------------------------------------
进栈了的。当前字符到 'p' 时,因不是 '$' 故而会去 re_call: 处,inc bx 就指向了 '$' 接着再 call reverse 会因为是 '$' 而返回,下来,就是显示 bx 处的字符,也就是 '$' 了。这样的结果,就是第一个字符反而不能显示了,所以你的 main 里才会有那么个显得多余的显示字符的功能调用。
其实,你 debug 这个程序,将 bx 指向 'p' 单步走一遍就会明白了。