题意描述:
用汇编语言实现汉诺塔。只需要显示移盘次序,不必显示所移盘的大小,例如: 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语言方式:
递归操作仔细想想就可以了,这样栈的操作逐渐明朗,你就可以用汇编语言实现它了(通过bp栈指针的运算进栈push出栈pop就可以实现相应递归调用)。
汇编代码实现如下:
耐心看看就行了,不是很难,栈的第一个参数是从bp 2开始的,别搞错了。
此为MASM语言格式汇编程序,链接成功后生成相应exe文件,打开即有如下执行效果..
最后,如果你想学C/C 可以私信小编“01”获取素材资料以及开发工具和听课权限哦!
,