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

如何在AArch64架构下使用内嵌汇编遍历C数组?

AArch64汇编输出异常及循环逻辑重写需求

原代码

void print(const char* text) {
    unsigned long address = 0x9000000;
    unsigned long counter = 0;
    char ch = *text;
    while (ch != '\0') {
        address += counter;
        asm volatile(
            "MOV X10, %[address];"
            "MOV W9, %w[ch];"
            "STRB W9, [X10];"
            :[address]"+r"(address), [ch]"+r"(ch)
        );
        ++counter;
        ch = *(text + counter);
    }
}

void start(void) {
    print("Hello, World!");
}

问题现象与需求

当前代码无法正常运行,仅输出Hel而非Hello, World!。需要将所有循环逻辑用内嵌汇编重写,但不清楚如何在汇编中读取并遍历C数组text,尝试多种方案均失败。

运行环境

  • 目标架构:AArch64(Cortex-A72)
  • Qemu启动命令:
qemu-system-aarch64 -M virt \
    -cpu cortex-a72 \
    -bios "/opt/homebrew/Cellar/qemu/$(QEMU_VERSION)/share/qemu/edk2-aarch64-code.fd" \
    -m 128M \
    -nographic \
    -device loader,file=$(BUILD_DIR)/kernel.elf \
    -device loader,addr=0x40100000,cpu-num=0
  • 编译环境:macOS(M1 Pro),使用LLVM clang和aarch64-elf-binutils编译链接生成kernel.elf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:55:05