1. ホーム
  2. assembly

[解決済み】Nasmエラー:オペコードとオペランドの無効な組み合わせ

2022-02-07 21:46:22

質問

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

解決方法は?

このフォームをよく見かけるのですが。 div 3, 15 これはINTELのニューモニックではありません。

15を3で割ること。

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

2つ目のエラーについてですが、16ビットレジスタを32ビットレジスタに移動させるようなことはできません。 次のいずれかを使用する必要があります。

xor     ecx, ecx
mov     cx, ax

または

movzx   ecx, ax