简单的ARM指令LDR基址寄存器偏移量问题

时间:2018-09-26 10:35:39

标签: assembly arm cpu-registers addressing-mode

|-----------------------------|------------------|-----------------------|
|      Executable file header |     Text Size    |      300 hex          |
|-----------------------------|------------------|-----------------------|
|                             |     Data Size    |      50 hex           |
|-----------------------------|------------------|-----------------------|
|      Text segment           |     Address      |      Instruction      |
|-----------------------------|------------------|-----------------------|
|                             | 0040 0000 hex    |  LDR r0, 8000hex (r3) |
|-----------------------------|------------------|-----------------------|
|                             | 0040 0004 hex    |  BL 00 00EChex        |
|-----------------------------|------------------|-----------------------|
|                             | ...              |  ...                  |
|-----------------------------|------------------|-----------------------|
|      Data Segment           | Address          |                       |
|-----------------------------|------------------|-----------------------|
|                             | 1000 0000hex     |     (X)               |
|-----------------------------|------------------|-----------------------|

此表说明了链接程序如何通过更新patterson&Hennessy在p139上的《计算机组织与设计4E》中的指令中的地址来连接两个目标文件。

关于如何确定“ LDR r0,8000hex(r3)”的负载偏移量,它说程序使用全局指针作为基址寄存器。并假设r4初始化为1000 8000hex,我们将8000hex放置在LDR的地址字段中的地址40 0000 hex处。

有人可以解释为什么当r4与r3无关时,为什么将8000hex作为偏移量?还是我误解了一些概念?

0 个答案:

没有答案