高分请教安腾-IPF的几句汇编语言的意思?(在线等)

wbcuc 2010-09-13 07:59:10
遇到一点IA64的汇编,实在不懂,想 请教大家:
1. 汇编语言子函数的NESTED_SETUP (2,6,8,0)什么意思?
2. ld8都是存的是什么,[r8], 8的如何改变的?
3. save和restore是如何实现的?



//
// Note: use of NESTED_SETUP requires number of locals (l) >= 3
//
#define NESTED_SETUP(i, l, o, r) \
alloc loc1=ar##.##pfs,i,l,o,r ;\
mov loc0=b0
#define NESTED_RETURN mov b0 = loc0; \
\
mov ar##.##pfs = loc1;; \
br##.##ret##.##dpnt b0;;

// void AsmLLCALLEX (UINTN FunctionAddr, UINTN StackPointer)
PROCEDURE_ENTRY(AsmLLCALLEX)
NESTED_SETUP (2,6,8,0)

// NESTED_SETUP uses loc0 and loc1 for context save

//
// Save a copy of the VM stack pointer
//
mov r8 = in1;;

//
// Copy stack arguments from stack into registers.
// Assume worst case and copy 8.
//
ld8 out0 = [r8], 8;;
ld8 out1 = [r8], 8;;
ld8 out2 = [r8], 8;;
ld8 out3 = [r8], 8;;
ld8 out4 = [r8], 8;;
ld8 out5 = [r8], 8;;
ld8 out6 = [r8], 8;;
ld8 out7 = [r8], 8;;

//
// Save the original stack pointer
//
mov loc2 = r12;

//
// Save the gp
//
or loc3 = r1, r0

//
// Set the new aligned stack pointer. Reserve space for the required
// 16-bytes of scratch area as well.
//
add r12 = 48, in1

//
// Now call the function. Load up the function address from the descriptor
// pointed to by in0. Then get the gp from the descriptor at the following
// address in the descriptor.
//
ld8 r31 = [in0], 8;;
ld8 r30 = [in0];;
mov b1 = r31
mov r1 = r30
(p0) br.call.dptk.many b0 = b1;;

//
// Restore the original stack pointer and gp
//
mov r12 = loc2
or r1 = loc3, r0

//
// Now return
//
NESTED_RETURN

PROCEDURE_EXIT(AsmLLCALLEX)
...全文
173 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
PALadinWIC 2011-11-27
  • 打赏
  • 举报
回复
我的妈呀,这是去年的帖子啊
PALadinWIC 2011-11-26
  • 打赏
  • 举报
回复
/ Note: use of NESTED_SETUP requires number of locals (l) >= 3
//
#define NESTED_SETUP(i, l, o, r) \
alloc loc1=ar##.##pfs,i,l,o,r ;\
mov loc0=b0
#define NESTED_RETURN mov b0 = loc0; \
--------------------------------------------------

我来瞎讲两句吧,
安腾的汇编里,有存储器栈和寄存器栈两种,那个ALLOC指令就是分配寄存器栈的指令。
这条指令的详细信息如下:

将前一帧标记的值存入LOC1寄存器,然后将当前帧标记的值存入前一帧标记(备份当前栈的父栈、父栈的父栈的信息)
创建一个新的寄存器栈,NESTED_SETUP (2,6,8,0)当中的2、6、8、0分别代表一个寄存器栈的参数,其中i代表什么我忘记了,l代表栈的本地区,o代表栈的输出区,R代表栈的轮换数量。

如果把一个寄存器栈比作用来存储一个过程(函数)的话,那个本地区就是存储这个过程内部的局部变量的,O代表的就这个过程要调用其它过程,或返回父过程时要传入或传出的内容的,R代表寄存器轮换的数量,这方面概念太复杂,我也没搞清楚。

总之就记得这些啦,希望能你楼主以帮助。
wbcuc 2011-02-18
  • 打赏
  • 举报
回复
有没有人顶一下 帖子也没法结啊
fc_cpp 2011-02-18
  • 打赏
  • 举报
回复
跨年度帮顶!只看过8086的汇编语法,这些xx看不懂
内容概要:本资源聚焦于配电网在发生故障后的两阶段鲁棒恢复研究,旨在提升电力系统在不确定性条件下的恢复能力与运行可靠性。研究采用两阶段优化方法,第一阶段进行预恢复决策,如网络重构、分布式电源出力调整等,以最小化预期损失;第二阶段则针对实际发生的故障场景实施校正控制,利用鲁棒优化理论应对负荷波动、新能源出力不确定性等因素,确保恢复方案的可行性与强健性。资源提供了完整的Matlab代码实现,复现了相关顶刊研究成果,便于使用者深入理解模型构建、算法求解及仿真分析全过程。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员及电力行业工程师。; 使用场景及目标:① 学习并掌握配电网故障恢复的先进优化方法,特别是两阶段鲁棒优化模型的构建与应用;② 复现和验证顶刊论文中的算法,为自身科研工作提供技术参考和代码基础;③ 将所学方法拓展应用于微电网、主动配电网等新型电力系统的可靠性评估与优化调度研究。; 阅读建议:学习者应结合提供的Matlab代码,仔细研读模型的数学公式与求解逻辑,重点关注不确定性建模、两阶段决策变量的设定以及鲁棒对等转换技巧。建议在掌握基础案例后,尝试修改参数或引入新的约束条件进行扩展研究,以深化理解并提升创新能力。

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧