📄 32060624_王克_asmhomework_4.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 + -