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

AArch64汇编中STR存储寄存器低字节失效问题求助

问题分析与修复

你的核心问题是错误使用了AArch64的字节操作指令语法,导致数据没有正确写入缓冲区。具体来说:

  • AArch64中没有str b3或ldr b0这类指令,字节加载/存储的正确指令是ldrb(字节加载)和strb(字节存储),操作数应为32位宽寄存器(如w3、w0),而非虚构的b3/b0寄存器。
  • 另外,write系统调用的标准输出文件描述符是1,而非代码中的0(0是标准输入),这会导致最终无法在终端打印内容。

修正后的代码

.section .data
    BCDBuffer:
    .space 5 // Buffer of size 5
    BCDBufferLen = . - BCDBuffer
.section .text
.global _start
_start:
    ldr x1, =BCDBuffer
    mov w0, #65535 // 使用w0而非x0,保持32位操作一致性

    // 计算BCD编码
    mov w4, #10000 // 改用w4(32位),与后续32位操作匹配
    udiv w3, w0, w4
    strb w3, [x1]  // 修正:用strb + w3执行字节存储
    umull x3, w3, w4
    sub w0, w0, w3
    add x1, x1, #1

    mov w4, #1000
    udiv w3, w0, w4
    strb w3, [x1]
    umull x3, w3, w4
    sub w0, w0, w3
    add x1, x1, #1

    mov w4, #100
    udiv w3, w0, w4
    strb w3, [x1]
    umull x3, w3, w4
    sub w0, w0, w3
    add x1, x1, #1

    mov w4, #10
    udiv w3, w0, w4
    strb w3, [x1]
    umull x3, w3, w4
    sub w0, w0, w3
    add x1, x1, #1

    strb w0, [x1] // 修正:用strb w0存储最后一位
    sub x1, x1, #4

    // 转换为ASCII
asciistuff:
    ldrb w0, [x1] // 修正:用ldrb加载字节到w0
    add w0, w0, #48
    strb w0, [x1], #1

    ldrb w0, [x1]
    add w0, w0, #48
    strb w0, [x1], #1

    ldrb w0, [x1]
    add w0, w0, #48
    strb w0, [x1], #1

    ldrb w0, [x1]
    add w0, w0, #48
    strb w0, [x1], #1

    ldrb w0, [x1]
    add w0, w0, #48
    strb w0, [x1]
    sub x1, x1, #3

    // 打印到终端
    mov x0, #1 // 修正:STDOUT的文件描述符是1
    mov x2, #5
    mov w8, #64 // write系统调用编号
    svc #0

    // 退出程序
    mov x0, #0
    mov w8, #93 // exit系统调用编号
    svc #0

关键修正点说明

  1. 字节操作指令修正:
    • 所有str bX改为strb wX,ldr bX改为ldrb wX,这是AArch64中正确的字节加载/存储指令格式,确保数据正确写入缓冲区。
  2. 寄存器宽度一致性:
    • 对32位数值操作时,统一使用w系列寄存器(如w0、w4),避免混用x系列64位寄存器造成不必要的扩展。
  3. 标准输出文件描述符修正:
    • 将mov x0, #0改为mov x0, #1,让write系统调用输出到标准终端。

现在重新编译调试,缓冲区会正确存储BCD编码,最终能在终端打印出65535。

内容的提问来源于stack exchange,提问作者Das heilige Dönerhuhn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:10:04