2013-02-28 67 views
3

在我學習NASM的過程中,我試圖創建一個非常簡單的程序來執行除法並輸出結果。Nasm錯誤:操作碼和操作數無效

靠書本,一切都應該運行良好。我將15除以3,它會自動存儲在AX寄存器中,然後我轉到ECX輸出。

然而,當我嘗試編譯,我得到錯誤

nums.asm:6: error: invalid combination of opcode and operands 
nums.asm:7: error: invalid combination of opcode and operands 

有誰知道什麼是錯的線6,7?

這是我的代碼:

segment .text 

    global main 
main: 

    div  3, 15 
    mov  ecx, ax 
    mov ebx,1  ; arg1, where to write, screen 
    mov eax,4  ; write sysout command to int 80 hex 
    int 0x80  ; interrupt 80 hex, call kernel 



exit: mov eax, 1 
    xor ebx, ebx 
    int 0x80 

回答

8

我一直經常看到這種形式:div 3, 15這不是任何有效的INTEL mneumonic!

要拆分15由3:

xor  edx, edx 
mov  eax, 15 
mov  ecx, 3 
div  ecx 

對於第二錯誤,則無法移動一個16位的寄存器到一個32位的寄存器那樣。您需要使用下列之一:

xor  ecx, ecx 
mov  cx, ax 

或者:

movzx ecx, ax 
+0

可以移動32位寄存器到16位? – CodyBugstein 2013-02-28 00:32:15

+15

你可以把1加侖的水加入1/2加侖的水罐中嗎? – Gunner 2013-02-28 00:33:31

+0

其中的一些......這就是我使用的邏輯,因爲我正在抓我的腦袋,想知道爲什麼你不能把一個16位寄存器放到一個32寄存器中 – CodyBugstein 2013-02-28 00:36:29