正在学ARM指令, 写了条ARM基址寻址方式的小程序, 发现实际和想的很不一样: AREA Example1, CODE, READONLY
ENTRY
Start
LDR R2, =0x1234 LDR R1, [R2,#1]
B Start
END
很简单的程序, 是把"R2+1" 做为指针,从内存中取出32bit 来放到R1中 在AXD下调试,默认是little edian手工把0x1234开始的内存改为: 0x12 0x34 0x56 0x78 0x9a 这样, 理论上感觉取出来放到R1中的数为 0x9a785634 (因为是little edian,取出的数从低字节地址开始放),
但是实际运行结果呢? 在寄存器监视窗口,是 0x12785634, 也就是说, 它仍然取了以0x1234 为地址 起始的4个数, 而且是以0x1234+1为起始"绕圈子"数了4个数填充过来,
不明白,继续实验,把LDR R1, [R2,#1]改成LDR R1, [R2,#3], 实验结果是 0x56341278, 看来是从0x1234+3处开始"绕圈子",填了4个数
以上,有些糊涂,请高人指教. 谢谢. |