我正在 Qemu 中尝试这个用于 armv5 connex 板的汇编程序。我添加两个数字并将它们存储在位置标签结果中。我无法在内存位置查看结果值 40,但寄存器值 r4 = 0x28。
.data
val1: .4byte 10
val2: .4byte 30
result: .4byte 0
.text
.align
start:
ldr r0, =val1
ldr r1, =val2
ldr r2, [r0]
ldr r3, [r1]
add r4, r2, r3
ldr r0, =result
str r4, [r0]
stop: b stop
Run Code Online (Sandbox Code Playgroud)
我的链接器脚本是
SECTIONS {
. = 0x00000000;
.text : {
*(.text);
}
.data : {
*(.data);
}
}
Run Code Online (Sandbox Code Playgroud)
输出
user@stretch:~/Desktop/Gnu_Toolchain/Data_In_Ram$ arm-none-eabi-nm -n data_in_ram.elf
00000000 t start
0000001c t stop
0000002c d val1
00000030 d val2
00000034 d result
info registers
R00=00000034 R01=00000030 R02=0000000a R03=0000001e
R04=00000028 R05=00000000 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000000 R13=00000000 R14=00000000 R15=0000001c
PSR=400001d3 -Z-- A svc32
FPSCR: 00000000
(qemu) xp /3dw 0000002C
xp: extraneous characters at the end of line
Try "help xp" for more information
(qemu) xp /3dw 0x0000002C
000000000000002c: 10 30 0
(qemu) xp /4dw 0x0000002C
000000000000002c: 10 30 0 0
(qemu)
Run Code Online (Sandbox Code Playgroud)
在 Connex 板上,物理地址 0 是 ROM,而不是 RAM。因此,您可以要求 QEMU 在那里加载代码,您可以执行它,并且您的程序可以从中读取数据,但代码写入那里的任何尝试都将被忽略。这解释了您看到的结果。
您的代码要么需要能够将自身重新定位到 RAM 中,要么您应该设置链接器映射,以便它首先到达那里。Connex 板上的 RAM 从 0xA000_0000 开始。
PS:为什么要使用基于 PXA255 的古老系统模型?
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |