Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何编写宏以将某个内容重复到特定地址?_Assembly_Macros_Gnu Assembler - Fatal编程技术网

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