需要帮助将以下 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
.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):

  • 初始%o0与 1
  • 删除mov %i0,%o0(每次迭代都粉碎mul结果)
  • ble替换为bl

最新更新