Nasm错误:操作码和操作数的无效组合

时间:2013-02-28 00:02:24

标签: assembly x86 nasm cpu-registers integer-division

在我学习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

1 个答案:

答案 0 :(得分:12)

我经常看到这种形式: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