Assembly 如何编写宏以将某个内容重复到特定地址?
将位置计数器前进到指定的偏移量,并用指定值填充额外的字节Assembly 如何编写宏以将某个内容重复到特定地址?,assembly,macros,gnu-assembler,Assembly,Macros,Gnu Assembler,将位置计数器前进到指定的偏移量,并用指定值填充额外的字节 .org 123, 1 @ Pads 1s until we reach address 123. 我想写一个宏来做类似的事情,但要有更复杂的“填充”。比如: @填充一些特殊符号,直到我们到达新地址。 .宏我的键盘新的 .如果\新信用证 .4字节某些特殊符号 我的便笺簿\新便笺簿 .endif .endm GAS抱怨这种实现是因为,而且显然不是绝对的 <instantiation>:2:5: error: expected
.org 123, 1 @ Pads 1s until we reach address 123.
我想写一个宏来做类似的事情,但要有更复杂的“填充”。比如:
@填充一些特殊符号,直到我们到达新地址。
.宏我的键盘新的
.如果\新信用证
.4字节某些特殊符号
我的便笺簿\新便笺簿
.endif
.endm
GAS抱怨这种实现是因为,而且显然不是绝对的
<instantiation>:2:5: error: expected absolute expression
.if . < 10
^
:2:5:错误:应为绝对表达式
.如果10
^
到目前为止,我找到的唯一解决方法是将宏的接口更改为重复计数,而不是结束地址。有更好的方法吗?基于
.macro my\u pad new\u lc
.如果基础<\new\u lc
.4byte 0xdeadbeef
我的便笺簿\新便笺簿
.endif
.endm
.数据
基数:
我的笔记本100
对于常量,也可以使用
.fill\new_lc-(.-base),4,0xdeadbeef
实现宏,而无需递归。但这可能与有相同的问题。如果。编辑:是的。计算一下
和某个符号之间的距离。@fuz你有完整的例子吗?@Maxpm现在懒得写一个。基本上,如果两个符号在同一部分中,它们的差异是一个常数,可以用于此目的。将一个符号放在节的开头,另一个符号为
。请注意,这只允许您查找与此文件中节的开头的差异,而这可能不是链接后的整体开头。
<instantiation>:2:5: error: expected absolute expression
.if . < 10
^
.macro my_pad new_lc
.if . - base < \new_lc
.4byte 0xdeadbeef
my_pad \new_lc
.endif
.endm
.data
base:
my_pad 100