使用汇编语言和DOSBox显示阶乘数。
我的代码的结果是:
输入编号:5
阶乘为5
Title this program display the factorial of a number
dosseg
.model small
.stack 0100H
.data
num db 10,13, 'Enter number: $'
ans db 10,13, 'The factorial is $'
.code
;clear screen
mov ax, 03H
int 10H
mov ax, @data
mov ds, ax
lea dx,num
mov ah, 09
int 21H
mov ah, 1
int 21H
mov bl,al
sub bl,1
fac:
mul bl ;al = al*bl
sub bl,1
loop fac
lea dx,ans
mov ah, 09
int 21H
mov ah, 02
mov dl, bl
int 21H
mov ah, 4ch
int 21H
int 20H
end
1条答案
按热度按时间zsbz8rwp1#
计算5!得到120,所以为了显示结果,不能只使用DOS中的单字输出函数02 h。阅读Displaying numbers with DOS,学习如何显示多位数。
sub al, '0'
。loop
指令依赖于CX寄存器,而您忘记了初始化它!现在不必麻烦了,因为没有loop
指令代码也能正常工作。只要BL变为1就退出循环。您不想乘以1,因为那是浪费时间。最多5个!
使用byte大小乘法的代码可以处理最多5!的阶乘(对于6!及以上,乘积将溢出AL寄存器):
在...中,您将编写显示AX中的编号的代码,并且可以从Displaying numbers with DOS复制该代码。
6!及以上
因为9!是362880,所以您需要使用word大小的乘法,并且为了避免任何溢出,您应该从2开始乘法,直到输入的数字。
在这里,您将显示DX:AX中的数字。也可以在Displaying numbers with DOS中找到。