📄 计算n!.txt
字号:
data segment
mess0 db 0dh, 0ah,'====expriment of compute N!====','$'
mess1 db 0dh, 0ah, 'please input the number N (N:0~9, ex:8): $'
mess2 db 0dh, 0ah, 'the result of N! is: $'
errMess db 0dh, 0ah,'----error input!----$'
data ends
code segment
main proc far
assume ds:data, cs:code
start:
push ds
mov ax, data ;设置数据段
mov ds, ax
xor ax, ax
push ax
;init
mov dx, 0
mov bx, 0 ;用于接收结果
;show message
mov ah, 09h
lea dx, mess0
int 21h
lea dx, mess1
int 21h
;键盘输入n的值
mov ah, 01h
int 21h
;合法性检查
cmp al, '0'
jl error
cmp al, '9'
jg error
sub al, '0'
call fact ;调用函数计算N!
mov bx, dx
mov ah, 09h
lea dx, mess2
int 21h
call show ;吊用函数显示N!
mov ah, 02
mov dl, 'H'
int 21h
jmp exit
error:
mov ah, 09h
lea dx, errMess
int 21h
exit: ret
main endp
;计算N!的子程序
fact proc
cmp al, 0
jnz multN
mov dl, 1
ret
multN: push ax ;利用栈保存上层的N值
dec al
call fact ;递归,计算(N-1)!
pop ax ;将上层N值取出
mul dl ;dl中存放的是相乘的结果
mov dx, ax
ret
fact endp
;以16进制形式显示结果
show proc
mov ch, 04h
mov cl, 04h
mov ah, 02h
showN: rol bx, cl
mov dl, bl
and dl, 0fh
add dl, '0'
cmp dl, '9'
jl print ;是数字则直接显示
add dl, 7h ;是大于9的数时转化为字母
print: int 21h
dec ch
jnz showN
ret
show endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -