4

私はまだアセンブリに不慣れで、アセンブリの多くのコマンド コードをまだ知りません。16ビットレジスタで割り算をしたいです。その内容を印刷したい。レジスターの内容を印刷用に ASCII に変換する必要があることはわかっていますが、やはり問題は除算です。私を助けてください。

たとえば、cx の内容は 2012 (整数) です。私は何をすべきか?

 mov ax, cx
 mov bx, 1000
 idiv bx

上記のコードは間違っていますよね?

4

2 に答える 2

4

編集:これは署名された部門であることに気付き、idivそれに応じて回答が編集されました。

上記のコードは 1 つの側面で間違っています:axに符号拡張されていませんdx:ax

cwdの前に (convert word to doubleword) を追加するだけidiv bxで、正しいです。商は にaxなり、剰余は になりますdx

于 2012-09-12T13:49:14.077 に答える
4

このリファレンスをチェックしてください(idivを検索してください)

idiv 命令は、64 ビット整数 EDX:EAX (EDX を最上位 4 バイト、EAX を最下位 4 バイトと見なすことによって構築される) の内容を、指定されたオペランド値で除算します。除算の商の結果は EAX に格納され、剰余は EDX に格納されます。構文 idiv idiv

idiv ebx — EDX:EAX の内容を EBX の内容で除算します。商を EAX に、余りを EDX に入れます。idiv DWORD PTR [var] — EDX:EAS の内容をメモリ位置 var に格納されている 32 ビット値で割ります。商を EAX に、余りを EDX に入れます。

もちろん、16 ビットを使用しているので、指定されたすべてのビット値を半分にカットし、各レジスタから E を削除すると、まったく同じになります。

于 2012-09-12T13:45:31.690 に答える