سلام و خسته نباشید
من یه برنامه برای محاسبه فاکتوریل اعداد یک رقمی نوشتم
برای همه ی اعداد جواب میده فقط فاکتوریل 9 رو اشتباه جواب میده یعنی چون جواب فاکتوریل 9 میشه 362880 که یه عدد 6 رقمی هستش رو اشتباها یه عدد 5 رقمی می نویسه
من کد برنامه رو می ذارم خواهش می کنم کمکم کنید و بهم بگید که چیکارش کنم. خیلی براش زحمت کشیدم اگه راه حلش رو می دونید تورو خدا ازم دریغ نکنید.
با سپاس فراوان
page 110,100
title 'fact.asm'
;--------------------------------------
stacksg segment stack 'stack'
dw 32h dup(0)
stacksg ends
;-----------------------------------------
; 2-define data segment
; ----------------------------------
datasg segment 'data'
fact dw ?
string db 6 dup(' '),"$"
datasg ends
;-----------------------------------------
; 3-define code segment
; ----------------------------------
codesg segment 'code'
assume ss:stacksg,ds:datasg,cs:codesg
main proc far
mov ax,datasg
mov ds,ax
;----------------------------------------------
mov ah,1h
int 21h
mov ah,0
sub ax,30h
mov fact,1
mov bx,ax
mov ax,1
while: cmp fact,bx
jnle end_while
mul fact
inc fact
jmp while
end_while:
;-------------------------------------
lea bx,string
add bx,5
mov cx,10
divloop: mov dx,0
div cx
add dl,30h
mov [bx],dl
dec bx
cmp ax,0
jne divloop
lea dx,string
mov ah,9h
int 21h
;mov dx,fact
;mov ah,2h
;int 21h
;--------------------------------------
mov ax,4c00h
int 21h
main endp
codesg ends
end main