汇编中数字的阶乘

Factorial of a number in assembly

我正在尝试查找数字的阶乘,但出现意外输出。对于 5,它应该是 120,但 00 即将到来。请帮助以下代码有时会进入无限循环。

.model small
.stack 100h
.data
buffer db 10 dup('$')
n dw 5  
.code
main proc 

    mov ax , @data
    mov ds ,ax
    mov ax , n
    mov bx , offset buffer
    mov cx , 1 

 l1 : 

inc cx  
mul cx
cmp cx , n
jne l1

l2 : 
mov dx, 0 
mov cx ,10  
div cx 
add dl,48 
mov [bx], dl 
inc bx
cmp ax, 0 
jne l1      

mov dx , offset buffer ; moving address to dx
mov ah,9 ; printing string
int 21h

mov ax, 4c00h
int 21h


main endp
end main    

l2 循环末尾的跳转不正确。当您应该跳到 l2.

时,您跳到了 l1

此外,在你的 l1 循环中你 incmul 在你决定是否退出循环之前。因此,在 n 为 5 的情况下,您将得到 5 * 2 * 3 * 4 * 5(即 600)。