我正在尝试为sparc机器编写以下代码。
y=(x-7)(x-11) for the range 0<=x<=10
我希望打印出以下代码,例如for input of x=0 output y=77
等等,最多可打印十个。
我设法制作循环。但我的问题是打印输出。
/*
This program will compute y=(x-7)(x-11)
for the range 0<=x<=10
*/
/*
these are the variables
*/
.section ".data"
mystring:.asciz "for input of x=%d and output y=%d"
define(a1,7)
define(a2,11)
define(x_r,l0)
define(x_r,l1)
.section ".text"
main:
save %sp,-96,%sp
clr %x_r
loop:
sub %x_r,a1,%o0 !(x-a1)
sub %x_r,a2,%o1 !(x-a2)
call .mul
nop
mov %o0,%y_r
add %x_r,1,%x_r
cmp %x_r,10
ble loop
nop
ret
restore
我知道我必须在我的代码上打印这样的东西,但我不知道在哪里。
set mystring,%o0
move %x_r,%o1
move %y_r,%o2
call printf
nop
我现在得到的输出是
输入x = 0输出y = 77输入x = 1输出y = 60输入x = 2输出y = 45输入x = 3输出y = 32输入x = 4输出y = 21表示输入x = 5输出y = 12表示输入x = 6表示输出y = 5表示输入x = 7输出y = 0表示输入x = 8输出y = -3表示输入x = 9输出y = -4,输入x = 10输出y = -3
我想要这样
输入x = 0输出y = 77 输入x = 1输出y = 60 ...... ...... 输入x = 10 y = -3
答案 0 :(得分:0)
自从我上次看到SPARC装配以来已经有一段时间了。现在CPU是x86或ARM。我对SPARC装配的了解非常生疏......
第二个别名是拼写错误,不是吗?我想它适用于y_r
define(x_r,l0)
define(x_r,l1)
使用mov %o0,%y_r
将乘法结果存储到%y_r
。而下一行add %x_r,1,%x_r
在C中为++x
,因此应在这两者之间调用printf
。