📄 exp66.asm
字号:
STACK SEGMENT STACK
DW 100 DUP(?)
STACK ENDS
DATA SEGMENT PARA
N DW 4
DATA ENDS
CODE SEGMENT PARA
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC
MOV AX,DATA
MOV DS,AX
MOV AX,N
PUSH AX
CALL CALCULATE ;RETURN AX=N!
CALL DISP_AX
MOV AX,4C00H
INT 21H
MAIN ENDP
@AB EQU 4 ;FOR NEAR 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 CALCULATE ;AX=(N-1)!
POP BX ;BX=N,NOT N-1 !!!
MUL BX ;AX=n*(n-1)
CAL2: POP BX
POP DX
POP BP
RET 2
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 + -