; N!=N*(N-1)*(N-2)*...*2*1(N>=0)
data segment
N dw 3
result dw ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,N
push bx
call fact
pop result
mov ax,4c00h
int 21h
fact proc near
push ax
push bp
mov bp,sp
mov ax,[bp+6]
cmp ax,0
jne fact1
inc ax
jmp fact2
fact1:
dec ax
push ax
call fact
pop ax
mul word ptr [bp+6]
fact2:
mov [bp+6],ax
pop bp
pop ax
ret
fact endp
code ends
end start
data segment
N dw 3
result dw ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,N
push bx
call fact
pop result
mov ax,4c00h
int 21h
fact proc near
push ax
push bp
mov bp,sp
mov ax,[bp+6]
cmp ax,0
jne fact1
inc ax
jmp fact2
fact1:
dec ax
push ax
call fact
pop ax
mul word ptr [bp+6]
fact2:
mov [bp+6],ax
pop bp
pop ax
ret
fact endp
code ends
end start