为sparc机器编写循环

时间:2014-02-07 19:02:19

标签: assembly sparc

我正在尝试为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

1 个答案:

答案 0 :(得分:0)

自从我上次看到SPARC装配以来已经有一段时间了。现在CPU是x86或ARM。我对SPARC装配的了解非常生疏......

  1. 第二个别名是拼写错误,不是吗?我想它适用于y_r

    define(x_r,l0)
    define(x_r,l1)
    
  2. 使用mov %o0,%y_r将乘法结果存储到%y_r。而下一行add %x_r,1,%x_r在C中为++x,因此应在这两者之间调用printf