2017-04-22 37 views
-3

我想用JMP和JZ寫彙編階乘代碼,我是新來組裝這有什麼錯我的彙編代碼

輸入應該是EAX和輸出是EBX

mov eax,3h ;factorial of 3 
    ;initialize registers 
    mov ebx,0h 
    mov ecx,eax 
    dec ecx 
    mov edx,0h 

loopstart: 
    mul ecx ;edx:eax = eax * ecx 
    add ebx,eax ;ebx = ebx + eax 
    dec ecx ;ecx = ecx - 1 
    jz exitloop ;jump to exitloop if the last math is zero (in this ex:dec) 
    jmp loopstart ;jump to loopstart 
exitloop: 
    ;mov eax,ebx 
    call ebxprint; should be 6 

查找EAX的階乘

輸入:2

輸出:2

輸入:3

輸出:12

輸入:4

輸出:60

所以,這裏有什麼問題嗎?

+2

描述實際輸出,註釋代碼,並學習如何使用調試器。提示:沒有添加因子,爲什麼你有一個? – Jester

+0

爲什麼你反覆添加部分計算的因子到'ebx'?我想你想刪除'add ebx,eax'指令,並在當前註釋掉的地方添加'mov ebx,eax';在'exitloop'之後的mov eax,ebx'。 –

+0

@PaulHankin謝謝 – BaselSayeh

回答

0

由於@PaulHankin

我必須刪除add ebx, eax並取消mov eax,ebx

下面是編輯後的代碼:

mov eax,3h ;factorial of 3 
    ;initialize registers 
    mov ebx,0h 
    mov ecx,eax 
    dec ecx 
    mov edx,0h 

loopstart: 
    mul ecx ;edx:eax = eax * ecx 
    dec ecx ;ecx = ecx - 1 
    jz exitloop ;jump to exitloop if the last math is zero (in this ex:dec) 
    jmp loopstart ;jump to loopstart 
exitloop: 
    mov eax,ebx 
    call ebxprint; should be 6