GNU汇编器是否支持类似gcc -E的宏展开并输出可汇编代码?
解决GNU汇编器展开宏并输出纯汇编代码的方法
针对m68k交叉编译场景,GNU汇编器(as)本身没有直接对应gcc -E的宏展开输出选项,但可以通过以下步骤实现需求:
生成包含宏展开的列表文件
使用交叉编译工具链中的m68k-linux-gnu-as(根据你的工具链实际命名调整),结合-a -am选项生成带宏展开细节的列表文件,同时指定输出空目标文件避免生成无用的.o文件:m68k-linux-gnu-as -a -am your_input.s -o /dev/null > macro_expanded.lst其中
-a用于触发列表文件生成,-am会启用宏展开的详细输出。过滤得到纯汇编代码
列表文件中混杂了注释、宏定义过程等冗余内容,可通过awk或sed过滤出实际用于生成机器码的展开后代码:
用awk适配as列表文件格式,提取带地址前缀的有效代码行:awk '/^[0-9]+[ \t]+[0-9a-f]+[ \t]+/ {sub(/^[0-9]+[ \t]+[0-9a-f]+[ \t]+/, ""); print}' macro_expanded.lst > clean_output.s或用
sed直接过滤注释行和空行:sed -e '/^#/d' -e '/^[ \t]*$/d' macro_expanded.lst > clean_output.s验证结果有效性
将过滤后的clean_output.s直接用as汇编,确认能生成正确的目标文件,验证展开后代码的可用性:m68k-linux-gnu-as clean_output.s -o test.o
内容的提问来源于stack exchange,提问作者Bri Bri
相关产品推荐
相关产品推荐

