题意描述:

用汇编语言实现汉诺塔。只需要显示移盘次序,不必显示所移盘的大小,例如: 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语言和汇编语言的汇编语言与C语言(1)

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

汇编代码实现如下:

c语言和汇编语言的汇编语言与C语言(2)

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

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

c语言和汇编语言的汇编语言与C语言(3)

c语言和汇编语言的汇编语言与C语言(4)

c语言和汇编语言的汇编语言与C语言(5)

c语言和汇编语言的汇编语言与C语言(6)

最后,如果你想学C/C 可以私信小编“01”获取素材资料以及开发工具和听课权限哦!

,