整数を入力として受け取り、その整数の整数値を6.985倍したプログラムをARMアセンブリ言語で記述する必要があります。たとえば、36が入力として入力された場合、結果は251になります。浮動小数点数の乗算を行うARMアセンブリ言語プログラムを作成
組み込み関数add(2つの整数を加算)、mul(2つの整数を乗算)、divide(2つの整数を加算) )、getnum(ユーザからの入力として整数を取得する)、printnum(出力を画面に出力する)の3種類があります。
bl getnum
mov r1, #1000
bl divide
mov r4, r0
mov r5, r1
bl printnum
mov r0, r5
bl printnum
私の質問:
bl getnum
mul r0, r0, #6985
bl printnum
ここで除算機能のための私のコードがあります:私のアプローチは、最初に6985を掛けおよび1000
ここMUL機能のための私のコードだことにより、その後、分割することです一度に乗算と除算を実行するにはどうすれば2つの方法を組み合わせることができますか?私はまだこの言語に慣れていないので、分割関数でgetnumを取り除き、それをmul関数と組み合わせる方法を知らない。
使用しているARM命令セットとプロセッサファミリは何ですか? Cortex-M4用ARMv7など?一般に、乗算と除算を同時に行う単一の命令はなく、一部のARMプロセッサには除算命令がありません。 – InfinitelyManic
正確な精度要件がない場合は、* 57221を実行して、8192 = * 6.9849853515625で値を分割することができます。ポイントは、8192は2^13なので、除算は13ビット。 (より正確な精度を得るために、元の6.985の値に2を掛けて、それらを切り捨てる小数で十分満足できるまで、何倍に掛けたかを数えてください)。さもなければあなたのアプローチは有効で、あなたが何を求めているのか分からず、分割部分に 'mul'の結果を使用してください。あなたが2のべき乗で行くなら、それがオーバーフローする前に最大数が乗算されることを試してください。 – Ped7g
2のべき乗による除算はもちろんシフト右です。左へのシフトは2のべき乗で乗算されます。 – Ped7g