我希望使用此代码找到小于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 _**
答案 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