【发布时间】:2013-01-30 01:32:53
【问题描述】:
我已经将一个 c 程序转换为一个汇编程序,并正在尝试简化代码:
.global Func1
Func1: save %sp, -112, %sp
!st %i0, [%fp+68]
!st %i1, [%fp+72]
!ld [%fp+68], %o0
!ld [%fp+72], %o1
call Func2, 0
nop
mov %o0, %g1
mov %g1, %i0
ret
restore
.global Func2
Func2: save %sp, -112, %sp
!st %i0, [%fp+68]
!st %i1, [%fp+72]
!ld [%fp+68], %g2
!ld [%fp+72], %g1
add %g2, %g1, %g1
umul %g1, 2, %g1
mov %g1, %i0
ret
restore
我已经将它简化到当我尝试更改某些内容时,它会更改程序的返回值。我的问题是,st 和 ld 是做什么的?我知道他们的意思,但这里到底发生了什么?仅使用 mov 或其他方法是否有其他方法可以做到这一点?在网上很难找到此类资源,因此我们将不胜感激。
【问题讨论】:
-
请解释这是什么架构,以及您使用的汇编程序。 (对我未经训练的眼睛来说,它看起来像 SPARC ......)。您是如何“将 C 转换为汇编”的?你希望借此赢得什么?
-
看起来像 SPARC,所以添加了
sparc标签。 -
抱歉,SPARC 忘记添加了。谢谢。
-
它们是加载和存储的。 SPARC 没有 mov 指令,尽管一些汇编程序支持它作为伪指令
-
看起来像是源自 commodore64 的火花
标签: assembly memory sparc risc