需要帮助将以下 C 函数翻译成 SPARC 汇编器
Need help translating following C function to SPARC assembler
我正在开发一个 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
我正在开发一个 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