2

このコードを使用して、8 未満の数値の階乗を見つけたいと考えています。しかし、これは機能していません。誰かが私を助けることができますか? これは私の家の仕事でした。試してみましたが、同じ文字が再び印刷され、古い..

.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

コードに少なくとも 3 つの主要な問題があります。

  • 8!は大きすぎて に収まりませんAL
  • 印刷コードは までの数字に対してのみ機能します9。48 を追加してから文字として印刷します。これは 1 桁の場合は問題ありませんが、それでも機能10しません。数字を印刷するための完全なセクションを作成する必要がありますか (または、教授が提供したセクションを使用する必要があります)?
  • 計算結果を に保存していますが、保存するALと上書きされますmov ax, @Data
于 2013-10-01T17:36:17.337 に答える