datarea
segment
n dw ?
result dw ?
datarea ends
stack_seg segment
dw 128 dup(0)
tos label word
stack_seg ends
prognam segment
main proc far
assume cs:prognam,ds:datarea,ss:stack_seg
start:
mov ax,stack_seg
mov ss,ax
mov sp,offset tos
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
; 殻會議麼勣何蛍
mov bx,n
push bx
call fact ; 距喘徨殻會fact
pop result
ret
main endp
fact proc near
; 協吶徨殻會fact
push ax
push bp
mov bp,sp
mov ax,[bp+6]
cmp ax,0
jne fact1
inc ax
jmp exit
fact1:
dec ax
push ax
call fact
pop ax
mul word ptr[bp+6]
exit: mov [bp+6],ax
pop bp
pop ax
ret
fact endp
prognam ends
end start