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