-2<=x<=8 の範囲で x^3 -14x^2 +56x -64 の最大値を見つけるアセンブリ プログラムを作成する必要があり、最大値はプログラムの最後のレジスタの 1 つにある必要があります。 .
コードを C で書いたのですが、それを自分でアセンブリに変換する方法がわかりません。この時点で本当に混乱しています。ところで、自分で変換する必要があります。gcc を使用してアセンブリに変換できません。これは SPARC 用です
#include<stdio.h>
int main()
{
int i;
int ans;
for (i = -2; i < 9; i++){
ans = (i * i * i) - (14 * i * i) + (56 * i) - 64;
}
}
私はアセンブリを書き込もうとしました。誰かがそれを批判して、私が正しい方向に進んでいるかどうか教えてもらえますか. また、最大数をテストするにはどうすればよいですか?
main:
save %sp, -96, %sp
ba test
mov -2, %a_r
loop:
mov %a_r, %o0 !a_r moved into o0
mov %a_r, %o1 !a_r moved into o1
call .mul !they are multiplied and stored in o0
call .mul !they are multiplied again and stored in o0
mov %o0, r0 !results stored in r0
mov %a_r, %o0 !a_r moved into o0 and o1
mov %a_r, %o1
call .mul !they are multiplied and stored in o0
mov 14, %o1
call .mul !o0 result is multiplied by 14 and stored in r1
mov %o0, r1
mov 56, %o0 !56 moved into o0
mov %a_r, %01 !a_r moved into o1
call .mul !they are multiplied and stored in r2
mov %o0, r2
Sub r0,r1,r0 !r0-r1 stored in r0
Add r0,r2,r0 !r0+r2 stored in r0
Sub r0,64,r0 !r0-64 stored in r0
add %a_r, 1, %a_r !a_r + 1
test:
cmp %a_r %b_r ! a_r<=8?
ble loop