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

Cod*_*ein 7 x86 assembly 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
Run Code Online (Sandbox Code Playgroud)

有谁知道第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
Run Code Online (Sandbox Code Playgroud)

Gun*_*ner 14

我经常看到这种形式: div 3, 15这不是任何有效的INTEL mneumonic!

将15除以3:

xor     edx, edx
mov     eax, 15
mov     ecx, 3
div     ecx
Run Code Online (Sandbox Code Playgroud)

对于第二个错误,您不能将16位寄存器移动到32位寄存器中.您需要使用以下之一:

xor     ecx, ecx
mov     cx, ax
Run Code Online (Sandbox Code Playgroud)

要么:

movzx   ecx, ax
Run Code Online (Sandbox Code Playgroud)

  • 你能把1加仑的水放在1/2加仑的水壶里吗? (19认同)
  • 其中一些......这就是我正在使用的逻辑,因为我想知道为什么不能将 16 位寄存器放入 32 位寄存器 (3认同)