8

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
4

1 に答える 1

17

私はこのフォームを頻繁に目にします: 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
于 2013-02-28T00:14:03.077 に答える