汇编汉诺塔

简介:

.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

目录
相关文章
|
11月前
|
C语言
c语言汉诺塔
c语言汉诺塔
87 0
|
算法 C语言
【辗转相除法简析】 +【C语言代码运用】
【辗转相除法简析】 +【C语言代码运用】
338 0
【辗转相除法简析】 +【C语言代码运用】
|
4月前
|
C语言
【汇编语言实战】八皇后问题
【汇编语言实战】八皇后问题
34 2
|
4月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
4月前
|
C语言
【汇编语言实战】解素数环问题
【汇编语言实战】解素数环问题
26 2
|
4月前
|
C语言
【汇编语言实战】解迷宫问题
【汇编语言实战】解迷宫问题
47 2
|
4月前
|
算法 C语言 网络架构
【汇编语言实战】整数拆分问题
【汇编语言实战】整数拆分问题
32 2
|
4月前
|
算法 C语言
约瑟夫环的C语言和86/88汇编非递归算法
约瑟夫环的C语言和86/88汇编非递归算法
49 0
|
4月前
|
C语言
【C语言】汉诺塔 —— 详解
【C语言】汉诺塔 —— 详解
|
4月前
|
C语言
C语言解决汉诺塔问题
C语言解决汉诺塔问题
45 0