2

我想使用此代码找到小于 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 _**
4

2 回答 2

3

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

  • 8!太大而无法放入AL
  • 您的打印代码仅适用于不超过9. 您要添加 48,然后将其打印为字符,这对于单个数字来说很好,但即使10它也无法工作。您需要写一个完整的部分来打印数字(或者使用您的教授提供的部分)?
  • 您将计算结果存储在 中AL,但在执行时会覆盖它mov ax, @Data
于 2013-10-01T17:36:17.337 回答
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
于 2013-10-05T18:25:07.690 回答