You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keil可运行的ARM32汇编代码在Ubuntu交叉编译报语法错误如何解决

问题根源

你当前遇到的报错不是架构选择错误导致的,核心原因是汇编语法不兼容:Keil环境使用的是ARM官方armasm汇编器的语法规则,而Ubuntu下arm-linux-gnueabihf-as属于GNU Binutils的汇编器(GAS),两者的伪指令、注释规则、段定义规则完全不同,你代码里的注释、伪指令都被GAS当成了无效指令解析,才会出现批量报错。


适配GNU工具链的修改方案

你需要对原有Keil风格汇编做如下调整,即可正常编译:

  • 段定义:将Keil的AREA prgm1, CODE, READONLY替换为GAS的.text
  • 入口声明:将Keil的ENTRY替换为.global _start,GNU链接器默认入口标识符为_start
  • 标签规则:所有代码标签后加冒号,比如main改为main:
  • 注释规则:Keil用;作为单行注释开头,ARM平台的GAS默认用@作为单行注释开头,把所有;替换为@即可避免注释被识别为指令
  • 栈操作:PUSH{LR}/POP{LR}要在指令和大括号之间加空格,改为PUSH {LR}/POP {LR}
  • 结束标识:将Keil的END替换为GAS的.end

修改后可正常编译的代码示例

.text
.global _start

_start:
main:
        MOV R1, #2
        BL func1
        MOV R9, R8 @ MOV F(2) into R9
        MOV R1, #5
        BL func1
        
                
stop:   B stop

func2:  MUL R2, R6, R3 @ Multiplies bk with x0
        ADD R0, R5, R2 @ Adds the results of the previous line with ak-1
        BX LR @ Output Value


func1:  MOV R6, #1 @ MOV the first coefficient into R6
        MOV R5, #3 @ MOV the second coefficient into R5
        MOV R3, R1 @ MOV the input to R3
        PUSH {LR} @ Pushes back to the main
        BL func2 @ Call function to output
        MOV R6, R0 @ MOV the ouput value to R6
        MOV R5, #5 @ Third Coefficient
        BL func2 
        MOV R6, R0
        MOV R5, #7
        BL func2
        MOV R6, R0
        MOV R5, #9
        BL func2
        MOV R8, R0
        POP {LR} @ POP LR from the stack 
        BX LR
.end

适配LPC2104架构的编译命令

LPC2104为ARMv4T架构的ARM7TDMI核心,编译时指定架构参数即可生成兼容的二进制文件:

arm-linux-gnueabihf-as -march=armv4t prgm1.s -o asm32.o && arm-linux-gnueabihf-ld -static -m armelf_linux_eabi asm32.o -o asm32

其他运行代码的方案

  • 不需要修改代码语法的前提下,可以在Ubuntu上通过Wine运行Windows版Keil,或者安装ARM官方提供的Development Studio工具链
  • 编译生成的二进制文件可以直接用qemu-arm静态模拟器运行,不需要实体硬件:qemu-arm ./asm32

内容的提问来源于stack exchange,提问作者Sasa Salmen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:57:03