汇编汉诺塔

简介:

.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

目录
相关文章
|
算法 C语言
【辗转相除法简析】 +【C语言代码运用】
【辗转相除法简析】 +【C语言代码运用】
456 0
【辗转相除法简析】 +【C语言代码运用】
|
C语言
c语言汉诺塔
c语言汉诺塔
124 0
|
10月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
10月前
|
C语言
【汇编语言实战】解迷宫问题
【汇编语言实战】解迷宫问题
79 2
|
10月前
|
算法 C语言
约瑟夫环的C语言和86/88汇编非递归算法
约瑟夫环的C语言和86/88汇编非递归算法
98 0
|
10月前
|
C语言
【C语言】汉诺塔 —— 详解
【C语言】汉诺塔 —— 详解
|
程序员
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
177 0
|
10月前
|
C语言
C语言解决汉诺塔问题
C语言解决汉诺塔问题
85 0
浅谈递归函数(最后一个例题:浅谈汉诺塔思路与代码)
浅谈递归函数(最后一个例题:浅谈汉诺塔思路与代码)
|
C语言
汉诺塔问题【C语言实现】
汉诺塔问题【C语言实现】
125 2