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

📄 exp83.asm

📁 汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂
💻 ASM
字号:
STACK   SEGMENT  STACK
        DW      100 DUP(?)
STACK   ENDS

DATA    SEGMENT PARA
INIT_N  DW      8
RESULT  DW      ?

ARGU_STRC       STRUC
SAVEBP          DW      ?
SAVEIP          DW      ?       ;NEAR CALL
N               DW      ?       ;ARGU1
RESULT_ADDR     DW      ?       ;ARGU2
ARGU_STRC       ENDS

DATA    ENDS


CODE    SEGMENT PARA
        ASSUME  CS:CODE,DS:DATA,SS:STACK
MAIN    PROC
        MOV     AX,DATA
        MOV     DS,AX

        MOV     AX,OFFSET RESULT
        PUSH    AX              ;&RESULT
        MOV     AX,INIT_N       ;PUSH ARGUn first
        PUSH    AX
        CALL    CALCULATE

        MOV     AX,RESULT
        CALL    DISP_AX

        MOV     AX,4C00H
        INT     21H
MAIN    ENDP

CALCULATE       PROC    NEAR
        PUSH    BP
        MOV     BP,SP

        PUSH    DX
        PUSH    BX

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

CAL1:   PUSH    BX                      ;BX=N

        PUSH    [BP].RESULT_ADDR        ;&RESULT
        DEC     BX              ;N=N-1
        PUSH    BX
        CALL    CALCULATE       ;NO RETURN VALUE

        MOV     BX,[BP].RESULT_ADDR
        MOV     [BX],AX         ;AX->RESULT
        POP     BX              ;BX=N,NOT N-1 !!!
        MUL     BX              ;AX=n*(n-1)   AX=AX*BX

CAL2:   MOV     BX,[BP].RESULT_ADDR
        MOV     WORD PTR [BX],AX        ;AX->RESULT

        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 + -