汇编汉诺塔

.386
.model flat
.stack 4096
include io.h
ExitProcess proto near32 stdcall, ExitCode:dword
cr equ 0dh
lf equ 0ah
.data
string1 byte "请输入汉诺塔数:", cr, lf
strNum byte 10 dup(?)
result byte 10 dup(' ')
       byte cr, lf, 0
.code
;递归时注意:在每一层的递归中,保证ebp基址指针的只是一样的(如果你使用了它)
Hanoi Proc near32
  push ebp
  mov ebp, esp
  mov ecx, [ebp+20];得到当前剩余的砖块的数目
  jecxz Finish

  ;完成n-1块从a柱子借助c柱子移向b柱子
  dec ecx
  push ecx
  pushd [ebp+16]; a
  pushd [ebp+8]; c
  pushd [ebp+12]; b
  call Hanoi
  add esp, 16;移除参数 a, b, c, 和砖块数目

  ;完成a柱子上的最后一块移向c柱子
   mov al, [ebp+16];得到a柱子的编号
   mov result, al
   mov al, '-'
   mov result+1, al
   mov al, '>'
   mov result+2, al
   mov al, [ebp+8];得到c柱子的编号
   mov result+3, al
   output result;输出移动结果
 
   ;完成n-1块从b柱子借助a柱子移向c柱子
   mov ecx, [ebp+20]
   dec ecx
   push ecx; 得到剩下的盘子
   push [ebp+12]; b
   push [ebp+8]; c
   push [ebp+16]; a
   call Hanoi
   add esp, 16;移除参数
Finish:
    pop ebp;还原ebp指针
    ret ;
Hanoi Endp

_start:
output string1
input strNum, 10
atod strNum
push eax;初始化操作
pushd 'a'
pushd 'b'
pushd 'c'
call Hanoi
invoke ExitProcess, 0
public _start
end









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3789629.html,如需转载请自行联系原作者
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值