|-----------------------------|------------------|-----------------------|
| 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?Или я неправильно понимаю какую-то концепцию здесь?