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