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

📄 32060624_王克_asmhomework_4.asm

📁 汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂
💻 ASM
字号:
;----------------------------------------------------------------
;        ╭══════┤    32060624___王克	         ├═════╮
;        ║          						     ║
;        ║             					     ║
;       ║              ★ 汇编语言 第四次作业 ★                   ║
;       ║      |---------------------------------------------|     ║
;       ║ 							     ║
;        ║                               2004.12.1                  ║
;        ║                                                          ║
;        ╰ ════════════════════════════╯
;汇编程序说明:
;	1.修改的部分用"-"标出
;	2.递归改为段间远调用。
;	3.@AB改为6,RET  2改为RET  4。
;	4.
;									2004.12.1 
;━┅━┅━┅━┅━┅━┅━┅━┅━━┅━┅━┅━┅━┅━┅━┅━━┅━┅━━┅━
.model	small
STACK   SEGMENT  STACK
        DW      100 DUP(?)
STACK   ENDS

DATA    SEGMENT PARA
;-----------------------------------------------------------------------  
N       DW      6
;-----------------------------------------------------------------------  
DATA    ENDS
;************************************************************
CODE    SEGMENT PARA
        ASSUME  CS:CODE,DS:DATA,SS:STACK
MAIN    PROC	far
        MOV     AX,DATA
        MOV     DS,AX

        MOV     AX,N
        PUSH    AX
;-----------------------------------------------------------------------        
        CALL    far ptr CALCULATE       ;RETURN AX=N!	 ;FOR FAR CALL
;-----------------------------------------------------------------------        
        CALL    DISP_AX

        MOV     AX,4C00H
        INT     21H
MAIN    ENDP
;************************************************************
;-----------------------------------------------------------------------
@AB     EQU     6               ;FOR FAR CALL
;-----------------------------------------------------------------------
;************************************************************
CALCULATE       PROC    NEAR
        PUSH    BP
        MOV     BP,SP

        PUSH    DX
        PUSH    BX

        MOV     BX,[BP+@AB]     ;GET N
        CMP     BX,0
        JNZ     CAL1
        MOV     AX,1            ;N=0,AX=1
        JMP     SHORT CAL2

CAL1:   PUSH    BX              ;BX=N
        DEC     BX              ;N=N-1

        PUSH    BX
;-----------------------------------------------------------------------        
        CALL    far ptr CALCULATE       ;AX=(N-1)!	 ;FOR FAR CALL
;-----------------------------------------------------------------------
        POP     BX              ;BX=N,NOT N-1 !!!
        MUL     BX              ;AX=n*(n-1)

CAL2:   POP     BX
        POP     DX
        POP     BP
;-----------------------------------------------------------------------          
        RET     4
;-----------------------------------------------------------------------          
CALCULATE       ENDP
;************************************************************
DISP_AX PROC    NEAR
        PUSH    DX
        PUSH    CX
        PUSH    BX
        PUSH    AX

        MOV     CX,5
        MOV     BX,10

DLP1:   XOR     DX,DX
        DIV     BX              ;DX:AX/AX=DX,AX
        PUSH    DX
        LOOP    DLP1

        MOV     BX,0            ;FLAG
        MOV     CX,5
DLP2:   POP     DX
        CMP     DL,0
        JNZ     DLP2_1
        CMP     BX,0
        JZ      DLP2_2
DLP2_1: MOV     BX,1
        OR      DL,30H
        MOV     AH,2
        INT     21H
DLP2_2: LOOP    DLP2

        POP     AX
        POP     BX
        POP     CX
        POP     DX
        RET
DISP_AX ENDP
;************************************************************
CODE    ENDS
        END     MAIN

⌨️ 快捷键说明

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