0

アセンブリプログラミングの学習を始めたばかりです。LinuxでNASMを使用しています。基本的に何かの何かのべき乗を計算することを目的としたこのコードを書きましたが、おそらく正確ではないことはわかっていますが、この時点では本当に気にしません。私が欲しいのは、なぜそのエラーが発生し続けるのかという考えだけです。オペランドと操作、および問題のあるセクションのすべてを変更して切り替えようとしましたが、エラーメッセージが増えるだけでした。私が言ったように、私はこのすべてのものに本当に、本当に新しいので、私はただ愚かかもしれません. 問題は、これらの行のいずれかにある必要があります。必要に応じて、もちろんもっと多くのコードを投稿しますが、70 ~ 80 行の奇妙で不必要に複雑なコードを実行する必要はありません。これが起こった理由として何が考えられるのか知りたいだけです。私は今、本当に必死で、それについて考え、新しい考えを持たないことがすべてを悪化させるところまで来ているからです。この部分だけ残しておきます。しかし、あなたが知る必要があることは何でも教えます。

    mov dword [power], 2
    mov ecx, 0

while:
    mov eax, [neededforloop]
    cmp eax, ecx
    je endwhile

    mov eax, [power]
    mul eax, 2
    mov [power], eax

    mov eax, ecx
    add eax, 1
    mov ecx, eax

    jmp while
4

1 に答える 1

8

確かに nasm は行番号をあなたに与えました...それはあなたを指しているはずですmul eax, 2mul次に、リファレンス マニュアルでその命令を調べたところ、オペランドとして即値を受け入れる命令がないことに気付いたはずです。そんな方imulもいますが。

TL;DR: に変更mul eax, 2しますimul eax, 2(実際には の短縮形ですimul eax, eax, 2)。

PS: シフトを使用して 2 を乗算する必要があります。

于 2015-05-19T21:06:21.650 に答える