我需要编写一个汇编程序,在-2< = x< = 8的范围内找到x ^ 3 -14x ^ 2 + 56x -64的最大值,最大值应该在最后的一个寄存器中该计划。
我在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
答案 0 :(得分:1)
您的答案缺乏细节,因为我们没有您要定位的计算机的相关信息。这听起来也像是家庭作业,所以我不会给你一个完整的答案。
但我要告诉你的是,要在程序集(任何类型)中实现循环,你需要使用标签和分支指令。
除此之外,它是一个简单的求和和乘法。只需将i
和ans
存储在两个不同的寄存器中(毕竟它们是不同的变量)。
修改
看起来你的方向正确(我从来没有为SPARC写过,但是快速浏览一下这些文档告诉我你有正确的想法)。关于最大数量:你将如何在C / C ++中实现它?想一想,做同样的装配! :)