当前位置: 代码迷 >> 汇编语言 >> 用递归倒序输出一个字符串,该怎么解决
  详细解决方案

用递归倒序输出一个字符串,该怎么解决

热度:10394   发布时间:2013-02-26 00:00:00.0
用递归倒序输出一个字符串
.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' 单步走一遍就会明白了。
  相关解决方案