到目前为止,在学习这个程序集时,这是一个非常整洁的主题。这本书没有给出好的例子,所以我完全迷失了我应该如何扩展这个宏,也许是在一个宏中呢?以下是它所要求的:如下面定义的两个宏推送和弹出,如果一个推送紧跟一个弹出,则可以将不必要的指令插入到程序中。需要扩展下面显示的宏定义并识别不必要的指令。 我将非常感谢您的解释,我想了解这应该如何扩展。
.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
答案 0 :(得分:1)
宏通常是“文本替换”。
那是:
pop %r1
扩展为(替换为):
ld [%r14], arg1
addcc %r14, 4, %r14
其中arg1(宏参数)替换为'call'中给出的参数: arg1 - > %R1
所以它最终成为:
ld [%r14], %r1
addcc %r14, 4, %r14
“其余部分留给读者作为练习。” ; - )
我不确定“多余”指示是什么意思。也许堆栈空间处理?还是NOP?