需要帮助将以下C函数转换为SPARC汇编程序

时间:2016-12-02 22:06:00

标签: c sparc

我正在研究一个SPARC程序集程序,在该程序中我调用了一个名为power的子程序,它接受一个基数,并根据指数乘以它自己的基数。基本上只是计算幂函数。我的问题是我无法将以下C函数转换为SPARC程序集。

power(int base, int exponent)
{
    register int p, e;
    p = 1;

    for(int e=1; e <= exponent; e++)
    {
        p *= base;
    }
} 

这就是我所拥有的,但我只得到49作为我的回答:

 .global main

main: save %sp,-96,%sp
      mov 7,%i0
      mov 5,%i1
      mov 1,%l2
loop: mov %i0,%o0
      mov %i0,%o1
      call .mul
      nop
      cmp %l2,%i1
      ble loop
      dec %i1

1 个答案:

答案 0 :(得分:0)

.global main

main: save %sp,-96,%sp
      mov 7,%i0      ! base
      mov 5,%i1      ! exponent
      mov 1,%l2      ! p
      mov %l2,%o0    ! %o0 = p = 1
      cmp  %i1,0     
      ble  end       ! if (exponent <= 0) -> end
loop: mov %i0,%o1    ! %o1 = base
      call .mul      ! %o0 = %o0 * %o1 -> p = p * base
      nop
      cmp %l2,%i1
      bl loop
      dec %i1
end:

获得结果的变化(7⁵= 16807):

  • Initalized %o0 with 1
  • 已移除mov %i0,%o0(每次重复粉碎mul结果)
  • ble
  • 替换bl