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

首个ARM汇编程序求助:armasm64中标签使用出现未定义符号错误

ARM汇编标签使用问题解决与核心规则

问题根源:标签定义缺少冒号

你遇到的undefined symbol: null_string错误,核心原因是标签定义时没有加冒号,armasm64汇编器要求标签必须以冒号:结尾才能被识别为有效标签,否则会被当作未定义符号处理。

修正后的代码示例

第一种代码修正版

AREA    |.text|, CODE, READONLY
    EXPORT  strlen

strlen:                              ; 标签必须加冒号
    cbz         x1, null_string         ; do nothing for a NULL string

;   ldrsb       x8,[x1]                 ; load first character into x8
;   mov         x9,x1                   ; save x1 into x9
;   cbz         x8,zero_length_string   ; handle if string is "\0"
;   ldrsb       x8,[x9,#1]!             ; load next character into x8
;   cbnz        x8,non_zero_character   ; compare and branch if x8 is > 0x00
;   sub         x8,x9,x1                ; this will give the count of characters in x8
;   mov         x1,x8                   ; x1 is returned to the caller

null_string:
    ret                                 ; mission complete!

END

第二种代码修正版

AREA    |.text|, CODE, READONLY
    EXPORT  strlen

strlen:                              ; 标签必须加冒号
    cmp x1, #0
    beq null_string
null_string:
    ret

END

ARM汇编标签使用核心规则

  • 必须以冒号结尾:这是汇编器识别标签的关键,比如strlen:是有效标签,strlen会被当作未定义符号。
  • 命名规范:标签名可包含字母、数字、下划线,不能以数字开头,且大小写敏感(Null_String和null_string是两个不同标签),避免使用ARM指令名、寄存器名作为标签。
  • 作用域与导出:
    • 标签默认仅在当前AREA(代码/数据段)内可见,若要让外部模块调用,需用EXPORT 标签名声明。
    • 引用其他模块的标签时,要提前用IMPORT 标签名声明。
  • 跳转有效性:跳转指令(如cbz、beq)中的标签必须在当前文件已定义,或通过IMPORT引入,否则会触发“未定义符号”错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:14:58