汇编汉诺塔

 1 .386
 2 .model flat
 3 .stack 4096
 4 include io.h
 5 ExitProcess proto near32 stdcall, ExitCode:dword
 6 cr equ 0dh
 7 lf equ 0ah
 8 .data
 9 string1 byte "请输入汉诺塔数:", cr, lf
10 strNum byte 10 dup(?)
11 result byte 10 dup(' ')
12        byte cr, lf, 0
13 .code
14 ;递归时注意:在每一层的递归中,保证ebp基址指针的只是一样的(如果你使用了它)
15 Hanoi Proc near32
16   push ebp
17   mov ebp, esp
18   mov ecx, [ebp+20];得到当前剩余的砖块的数目
19   jecxz Finish
20 
21   ;完成n-1块从a柱子借助c柱子移向b柱子
22   dec ecx
23   push ecx
24   pushd [ebp+16]; a
25   pushd [ebp+8]; c
26   pushd [ebp+12]; b
27   call Hanoi
28   add esp, 16;移除参数 a, b, c, 和砖块数目
29 
30   ;完成a柱子上的最后一块移向c柱子
31    mov al, [ebp+16];得到a柱子的编号
32    mov result, al
33    mov al, '-'
34    mov result+1, al
35    mov al, '>'
36    mov result+2, al
37    mov al, [ebp+8];得到c柱子的编号
38    mov result+3, al
39    output result;输出移动结果
40  
41    ;完成n-1块从b柱子借助a柱子移向c柱子
42    mov ecx, [ebp+20]
43    dec ecx
44    push ecx; 得到剩下的盘子
45    push [ebp+12]; b
46    push [ebp+8]; c
47    push [ebp+16]; a
48    call Hanoi
49    add esp, 16;移除参数
50 Finish:
51     pop ebp;还原ebp指针
52     ret ;
53 Hanoi Endp
54 
55 _start:
56 output string1
57 input strNum, 10
58 atod strNum
59 push eax;初始化操作
60 pushd 'a'
61 pushd 'b'
62 pushd 'c'
63 call Hanoi
64 invoke ExitProcess, 0
65 public _start
66 end

 

转载于:https://www.cnblogs.com/hujunzheng/p/3789629.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值