次のプログラムで何が問題なのかを把握するために 3 時間以上試行錯誤してきました。私がやろうとしているのは、x を y で除算し、除算とモジュロの結果を出力することだけです。また、 % が内部にあるモジュロの printf は、すべてを台無しにします。誰もそれを修正する方法を知っていますか? 私はアセンブリIA32に取り組んでいます。ユーザーから既に x と y を取得しているとします。
.section .rodata
format1: .string "Div : %d / %d = %d\n"
format2: .string "Mod : %d % %d = %d\n"
.text
.globl main
.type main, @function
# operation divide
movl x, %eax
cltd
idivl y
pushl %eax
pushl y
pushl x
pushl $format1
call printf
# operation modulo
pushl %edx
pushl y
pushl x
pushl $format2
call printf
モジュロを %edx レジスタに保持する必要があることはわかっていますが、なぜ機能しないのですか? どうもありがとう!D:
編集: OK、%edx を %ebx に保存したところ、モジュロが正常に動作するようになりました。(%edx にあるものを印刷すると、正しいモジュロが得られます) しかし、画面への印刷はまだ私が望むものではありません。これは、x=2、y=4 の出力です。
Divide : 2 / 4 = 0
Modulo : 2 %d = 4
そして、私はそれを次のようにしたい:
Divide : 2 / 4 = 0.50
Modulo : 2 % 4 = 2