如何在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
相关产品推荐
相关产品推荐

