• 汇编汉诺塔


     1 .386
     2 .model flat
     3 .stack 4096
     4 include io.h
     5 ExitProcess proto near32 stdcall, ExitCode:dword
     6 cr equ 0dh
     7 lf equ 0ah
     8 .data
     9 string1 byte "请输入汉诺塔数:", cr, lf
    10 strNum byte 10 dup(?)
    11 result byte 10 dup(' ')
    12        byte cr, lf, 0
    13 .code
    14 ;递归时注意:在每一层的递归中,保证ebp基址指针的只是一样的(如果你使用了它)
    15 Hanoi Proc near32
    16   push ebp
    17   mov ebp, esp
    18   mov ecx, [ebp+20];得到当前剩余的砖块的数目
    19   jecxz Finish
    20 
    21   ;完成n-1块从a柱子借助c柱子移向b柱子
    22   dec ecx
    23   push ecx
    24   pushd [ebp+16]; a
    25   pushd [ebp+8]; c
    26   pushd [ebp+12]; b
    27   call Hanoi
    28   add esp, 16;移除参数 a, b, c, 和砖块数目
    29 
    30   ;完成a柱子上的最后一块移向c柱子
    31    mov al, [ebp+16];得到a柱子的编号
    32    mov result, al
    33    mov al, '-'
    34    mov result+1, al
    35    mov al, '>'
    36    mov result+2, al
    37    mov al, [ebp+8];得到c柱子的编号
    38    mov result+3, al
    39    output result;输出移动结果
    40  
    41    ;完成n-1块从b柱子借助a柱子移向c柱子
    42    mov ecx, [ebp+20]
    43    dec ecx
    44    push ecx; 得到剩下的盘子
    45    push [ebp+12]; b
    46    push [ebp+8]; c
    47    push [ebp+16]; a
    48    call Hanoi
    49    add esp, 16;移除参数
    50 Finish:
    51     pop ebp;还原ebp指针
    52     ret ;
    53 Hanoi Endp
    54 
    55 _start:
    56 output string1
    57 input strNum, 10
    58 atod strNum
    59 push eax;初始化操作
    60 pushd 'a'
    61 pushd 'b'
    62 pushd 'c'
    63 call Hanoi
    64 invoke ExitProcess, 0
    65 public _start
    66 end
  • 相关阅读:
    document.ready和window.onload的区别
    js取float型小数点后x位数的方法
    深入理解CSS过渡transition
    HTTP网络协议
    记一次完整的pc前端整站开发
    理解 JavaScript 中的 Function.prototype.bind
    图片懒加载方法
    web开发中兼容性问题(IE8以上含)持续更新~~
    HTTP协议GET和POST请求的区别
    移动端适配之雪碧图(sprite)背景图片定位
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3789629.html
Copyright © 2020-2023  润新知