21,458
社区成员
发帖
与我相关
我的任务
分享
;入口参数AX
;返回:AX=N!
fact proc uses bx cx
mov cx,ax
mov ax,1
mov bx,1
s:
mul bx
inc bx
loop s
ret
fact endp
cseg segment
assume cs:cseg
start:mov ah,1
int 21h
;mov cx,al
mov cl,al
mov ah,2 ;这里显示一个回车换行
mov dl,0dh
int 21h
mov dl,0ah
int 21h
sub cl,30h ;把数字字符变成对应的数字
mov ch,0 ;高8位变0
mov ax,1 ;下面乘法的初值
mula:
mul cx
;loopne mula
loop mula ;加ne没用
;mov dx,cx ;不能直接这样显示,另外这显示的是cx, 真正的结果在dx,ax
;mov ah,2
;int 21h
mov bx,10
mov cx,0
L1:
div bx ;除以10
push dx ;保存余数
inc cx ;计数器加1
mov dx,0 ;为下次除法准备
cmp ax,0 ;上次除法的商是否为0
jne L1 ;不为0再重复上述过程
;到此处, 已把结果从底为到高位分离入栈
mov ah,2
L2:
pop dx ;从高位出栈
add dl,30h ;变成数字字符
int 21h ;显示
loop L2
mov ah,4ch
int 21h
cseg ends
end start