⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hanoi.asm

📁 汇编语言实现汉诺塔移动问题
💻 ASM
字号:
       DSEG SEGMENT
            INPUT1 DB 'PLEASE INPUT THE NUMBER BETWEEN 1 AND 9:    $'
            SPACE1 DB '  $'
            ENTER1 DB 10,13,'$'
       DSEG ENDS
       ;**************************************************
       SSEG SEGMENT    STACK
            DB 100 DUP(?)
            TOP EQU $
       SSEG ENDS
       ;**************************************************
       CSEG SEGMENT
            ASSUME CS:CSEG,DS:DSEG,SS:SSEG
    START:  MOV   AX,DSEG
            MOV   DS,AX
            LEA   SP,TOP
            CALL  INPUT    ;从键盘上读入最大码值存入到cl
            MOV   CL,CH    ;将最大码值给cl
            MOV   BL,'X'   ;x为源轴
            MOV   BH,'Z'   ;z为目标轴
            MOV   CH,'Y'   ;y为辅轴
            CALL  HANOI    ;启动hanoi
            MOV   AH,4CH
            INT   21H 
    HANOI   PROC          ;
            PUSH  BX
            PUSH  CX
            PUSH  AX     ;用ax dx 来临时保存源、目标、辅轴
            PUSH  DX
            MOV   AL,BL
            MOV   AH,BH
            MOV   DH,CH            
            CMP   CL,1
            JNZ   NEXT
            MOV   BL,AL  ;将1码从x送到z
            MOV   CL,1
            MOV   BH,AH
            CALL  MOVETO
            JMP   ENDHANOI
     NEXT:  DEC   CL      ;将x上1-(n-1)的码送到y,z做辅轴
            MOV   BL,AL
            MOV   BH,DH
            MOV   CH,AH
            CALL  HANOI
            MOV   BL,AL  ;将n码由x送到z
            MOV   BH,AH
            INC   CL
            CALL  MOVETO
            MOV   BL,DH  ;将1-(N-1)码由Y送到Z,X为辅轴
            MOV   BH,AH
            MOV   CH,AL
            DEC   CL
           ;DEC   CL
            CALL  HANOI
 ENDHANOI: 
            POP   DX
            POP   AX       
            POP   CX
            POP   BX
            RET
   HANOI    ENDP
     MOVETO PROC
            PUSH  AX
            PUSH  BX
            PUSH  CX
            MOV   DL,BL
            CALL  SHOW     ;显示源轴
            CALL  SPACE
            MOV   DL,'-'
            CALL  SHOW
            MOV   DL,'>'
            CALL  SHOW
            MOV   DL,BH
            CALL  SHOW      ;显示目标轴
            CALL  SPACE
            MOV   DL,CL
            OR    DL,30H
            CALL  SHOW      ;显示移动的码数
            CALL  ENTER
            POP   CX
            POP   BX
            POP   AX
            RET 
   MOVETO   ENDP
SHOW_STRING PROC
            PUSH  AX
            MOV   AH,09H
            INT   21H
            POP   AX
            RET
SHOW_STRING ENDP
     SPACE  PROC
            PUSH  DX
            LEA   DX,SPACE1
            CALL  SHOW_STRING
            POP   DX
            RET 
     SPACE  ENDP
     ENTER  PROC
            PUSH  DX
            LEA   DX,ENTER1
            CALL  SHOW_STRING
            POP   DX
            RET
     ENTER  ENDP
     SHOW   PROC
            PUSH  AX
            MOV   AH,02H
            INT   21H
            POP    AX
            RET
     SHOW   ENDP
     INPUT  PROC
            PUSH   DX
            PUSH   AX
            LEA    DX,INPUT1
            CALL   SHOW_STRING
            MOV    AH,01H
            INT    21H          
            AND    AL,0FH
            MOV    CH,AL
            CALL   ENTER
            POP    AX
            POP    DX
            RET
     INPUT  ENDP
            MOV  AH,4CH
            INT  21H
     CSEG   ENDS 
            END START
            
            
            
            
     
         
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -