能否将不同架构的(GNU)汇编代码放入单个源文件中?
多架构兼容的单文件汇编实现方案
我明白你想要把适配不同架构的汇编代码整合到单个预处理后的汇编文件里,而不是依赖C内联汇编——毕竟没有实际的C代码,纯汇编文件确实是更合适的选择。下面是整理好的示例实现:
.file "zsvjmp.S" # 此处说明该代码的功能,比如:实现跨架构的非局部跳转入口 .globl zsvjmp_ .text zsvjmp_: #if defined (__i386__) # 此处为i386架构专属汇编代码,比如: # pushl %ebp # movl %esp, %ebp # ... 后续i386平台的实现逻辑 #elif defined (__arm__) @ 此处为ARM架构专属汇编代码,比如: @ stmfd sp!, {r4-r11, lr} @ mov r4, r0 @ ... 后续ARM平台的实现逻辑 #elif defined (__x86_64__) # 此处为x86_64架构专属汇编代码,比如: # pushq %rbp # movq %rsp, %rbp # ... 后续x86_64平台的实现逻辑 #else # 可选:添加不支持架构的报错处理 # error "Unsupported architecture" #endif
关键细节说明
- 用
.file指令声明文件名,帮助编译工具链正确追踪文件信息 .globl zsvjmp_导出全局符号,确保外部代码可以调用这个汇编实现- 通过C预处理器指令
#if/#elif区分不同架构,每个分支对应专属的汇编代码,编译时会根据目标平台自动选择对应的代码段 - ARM架构的注释用
@,x86系列用#,符合各自汇编语法的习惯
内容的提问来源于stack exchange,提问作者olebole
相关产品推荐
相关产品推荐

