アセンブリでの以下の動作に問題があります。私はアセンブリIA32に取り組んでいます。-4(%ebp)=x および -8(%ebp)=y と仮定すると、既にユーザーからそれらを取得しています (両方とも 32 ビット長)。これはコードです:
format1: .string "Multiply : %u * %u = %llu\n"
format2: .string "Divide : %u / %u = %u\n"
# operation multiply
movl -4(%ebp), %eax
mull -8(%ebp)
pushl %edx
pushl %eax
pushl -8(%ebp)
pushl -4(%ebp)
pushl $format1
call printf
# operation divide
movl -4(%ebp), %eax
divl -8(%ebp)
pushl %eax
pushl -8(%ebp)
pushl -4(%ebp)
pushl $format2
call printf
乗算の結果が %llu にある理由は、2 つの長い数値を乗算し、結果が 64 バイトに達した場合でも結果を出力できるようにしたいからです。また、%edx では、mull コマンドが 64 バイトの結果の「その他の 32 バイト」を保存するため、printf のスタックにもプッシュする必要があります。たとえば、次の出力が必要です。
Multiply : 4000000000 * 2 = 16000000000
また、3 と 4 の除算演算で X.YZ の結果が返されるようにします。(仮数部の数字は 2 つまでで、四捨五入はありません) 例
Divide : 3 / 4 = 0.75
19 と 1000 の場合:
Divide : 19 / 1000 = 0.01
8 と 2 の場合:
Divide : 8 / 2 = 4.00
結果を得るために本当に多くのことを試みましたが、成功しませんでした。どうもありがとう!:)