如何在GNU汇编器中定义数据目录路径?
汇编中统一管理.incbin路径前缀的方法
我一开始把所有数据文件和源代码放在同一目录下,用下面的代码引用数据:
.image_01: .incbin "image_01.bin" .image_02: .incbin "image_02.bin"
这种做法既杂乱又不符合规范,于是我把数据文件移到了上级目录的data文件夹中,代码改成了这样:
.image_01: .incbin "../data/image_01.bin" .image_02: .incbin "../data/image_02.bin"
现在源码目录整洁了,但每次都重复写../data/路径,违反了DRY(Don't Repeat Yourself)原则。想知道能不能定义类似DATADIR="../data/"的变量,把它和数据文件名拼接,比如写成.image_01: .incbin DATADIR + "image_01.bin"?
当然可以实现,具体语法取决于你使用的汇编器:
GNU汇编器(GAS)
可以利用GAS的预处理器功能,用#define定义路径前缀,字符串直接拼接即可(不需要+号):
#define DATADIR "../data/" .image_01: .incbin DATADIR "image_01.bin" .image_02: .incbin DATADIR "image_02.bin"
NASM汇编器
用%define来定义宏变量,同样直接拼接字符串:
%define DATADIR "../data/" image_01: incbin DATADIR "image_01.bin" image_02: incbin DATADIR "image_02.bin"
这样就能统一管理数据文件的路径前缀,避免重复代码,完全符合DRY原则。
内容的提问来源于stack exchange,提问作者gfdjjrtiejo
相关产品推荐
相关产品推荐

