题意描述:  

   用汇编语言实现汉诺塔。只需要显示移盘次序,不必显示所移盘的大小,例如: X>Z,X>Y,Z>Y,X>Z,....。

(n阶Hanoi塔问题)假设有三个分别命名为X、Y、Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则:

1)每次只能移动一个圆盘;

2)圆盘可以插在X、Y、Z中的任一塔座上;

3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。

汉诺塔的实现,用C语言来解释就是函数递归调用实现

如果转为汇编实现,就直接进入栈进行相应的操作就行(当然你也可以用汇编语言宏实现高级的递归调用..)

C语言方式:

汇编语言、与C语言、实现——汉诺塔

递归操作仔细想想就可以了,这样栈的操作逐渐明朗,你就可以用汇编语言实现它了(通过bp栈指针的运算进栈push出栈pop就可以实现相应递归调用)。

汇编代码实现如下:

汇编语言、与C语言、实现——汉诺塔

耐心看看就行了,不是很难,栈的第一个参数是从bp+2开始的,别搞错了。

此为MASM语言格式汇编程序,链接成功后生成相应exe文件,打开即有如下执行效果..

汇编语言、与C语言、实现——汉诺塔

汇编语言、与C语言、实现——汉诺塔

汇编语言、与C语言、实现——汉诺塔

汇编语言、与C语言、实现——汉诺塔

最后,如果你在学习C/C++的过程中遇到了问题,可以来问小编哦~小编很热情的(●'◡'●)

声明:本文内容来源于网络,如有侵权请联系删除

相关文章:

  • 2021-09-03
  • 2021-11-05
  • 2021-06-11
  • 2022-12-23
  • 2021-11-06
  • 2021-11-06
  • 2022-12-23
  • 2021-10-01
猜你喜欢
  • 2021-08-24
  • 2022-12-23
  • 2022-12-23
  • 2022-02-20
  • 2021-07-08
  • 2022-12-23
相关资源
相似解决方案