Простая инструкция ARM LDR базовый регистр смещение вопрос - PullRequest
0 голосов
/ 26 сентября 2018
|-----------------------------|------------------|-----------------------|
|      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)               |
|-----------------------------|------------------|-----------------------|

Это таблица, иллюстрирующая, как компоновщик соединяет два объектных файла, обновляя адреса в инструкции из Computer Organization & Design 4E от Patterson & Hennessy на p139.

О том, как смещение нагрузки былоопределенный для "LDR r0, 8000hex (r3)", он сказал, что программа использует глобальный указатель в качестве базового регистра.Предполагая, что r4 инициализирован в 1000 8000hex, мы помещаем 8000hex в поле адреса LDR по адресу 40 0000 в шестнадцатеричном формате.

Может кто-нибудь объяснить, почему вы положили бы 8000hex в качестве смещения, если r4 не имеет ничего общего с r3?Или я неправильно понимаю какую-то концепцию здесь?

...