汇编语言中的因子

时间:2013-10-01 17:08:31

标签: assembly masm masm32

我希望使用此代码找到小于8的数字的阶乘。但这不起作用任何人都可以帮助我吗? 这是我的家庭作业。我尝试了,但它再次打印相同的字符和agian ..

.model small_  
.stack_

.data_  
no db 1h_ ;  
counter db 1_  
string1 db "Please Enter the No. to calculate factorial (0~8): ","$"  
string2 db "Factorial is: ","$"  

.code  
main proc  
mov ax,@data  
mov ds,ax  
mov dx,offset string1  
mov ah,09h  
int 21h  
mov cl,1  
loop1:  
cmp counter,3  
ja End1  
mov ah,01h  
int 21h  
sub al,48  
inc counter  
mov no,al  
cmp no,8  
ja loop1  

Factorial:  
cmp no,cl  
je display  
mul al,cl  
inc cl  
jmp factorial  

Display:  
mov ax,@data  
mov ds,ax  
mov dx,offset string2  
mov ah,09  
int 21h  
mov dl,al  
add dl,48  
mov ah,02h  
int 21h  
End1:  
mov ah,4ch  
int  21h  
main endp  
**_End main _**

2 个答案:

答案 0 :(得分:3)

您的代码中至少存在三个主要问题:

  • 8!太大,无法容纳AL
  • 您的打印代码仅适用于最高9的数字。你正在添加48然后打印成一个字符,这对于单个数字来说很好,但即使对于10它也无法工作。您需要编写一个完整的部分来打印数字(或者使用您教授提供的部分)?
  • 您将计算结果存储在AL中,但是当您执行mov ax, @Data时会将其覆盖。

答案 1 :(得分:0)

试试这个:

GetFactorial proc N:DWORD 
    mov eax,N
    mov ebx,eax 
    @L:
    dec ebx
    Test ebx,ebx
    je @End
    imul eax,ebx 
    jmp @L
    @End:
    ret
GetFactorial endp