如何扩展宏定义并识别ARC Assembly中不必要的指令?

时间:2014-10-29 03:38:06

标签: assembly macros sparc

到目前为止,在学习这个程序集时,这是一个非常整洁的主题。这本书没有给出好的例子,所以我完全迷失了我应该如何扩展这个宏,也许是在一个宏中呢?以下是它所要求的:如下面定义的两个宏推送和弹出,如果一个推送紧跟一个弹出,则可以将不必要的指令插入到程序中。需要扩展下面显示的宏定义并识别不必要的指令。 我将非常感谢您的解释,我想了解这应该如何扩展。

.begin 
.macro push arg1 
addcc %r14, -4, %r14 
st arg1, [%r14] 
.endmacro 
.macro pop arg1 
ld [%r14], arg1 
addcc %r14, 4, %r14 
.endmacro 
! Start of program 
.org 2048 
pop %r1 
push %r2 
. 
. 
. 
.end

1 个答案:

答案 0 :(得分:1)

宏通常是“文本替换”。

那是:

pop %r1 

扩展为(替换为):

ld [%r14], arg1 
addcc %r14, 4, %r14 

其中arg1(宏参数)替换为'call'中给出的参数: arg1 - > %R1

所以它最终成为:

ld [%r14], %r1
addcc %r14, 4, %r14

“其余部分留给读者作为练习。” ; - )

我不确定“多余”指示是什么意思。也许堆栈空间处理?还是NOP?