Разница между «счетчиком программы» и «начальным адресом» - PullRequest
7 голосов
/ 22 марта 2012

Я использую GDB для загрузки исполняемого файла на встроенном устройстве. При загрузке исполняемого файла GDB говорит:

xPSR: 0x01000000 pc: 0xf0094902 msp: 0x2001b508
Loading section .text, size 0x16240 lma 0x8000000
Loading section .data, size 0x8f0 lma 0x8016240
Start address 0x8000000, load size 92976

Как я понимаю, pc является указателем инструкции. Я предполагаю, что «начальный адрес» является начальным адресом для pc. Однако в информации, которую предоставляет мне GDB, начальный адрес (0x8000000, который, кстати, совпадает с .text), равен , а не , как pc (0xf0094902).

В чем разница между pc и начальным адресом? Имеет ли смысл иметь начальный адрес таким же, как .text?

Ответы [ 3 ]

5 голосов
/ 22 марта 2012

Я предполагаю, что счетчик программы является текущим значением после загрузки, но до запускается.Когда вы начинаете работать, то, конечно, зависит от процессора, но, скорее всего, он описывает адрес для начала выполнения загруженного кода, адрес для установки счетчика программы, прежде чем разрешить процессору снова работать.Если вы бежите, то остановитесь быстро, вы должны увидеть что-то в диапазоне .text для ПК 0x80000000 + 0x16240

3 голосов
/ 22 марта 2012

Упомянутый здесь «начальный адрес» является началом двоичного образа, а не начальным адресом выполнения. Начальный адрес для выполнения - это то, что содержится в векторе сброса (при условии, что вы используете Cortex-M3, как и раньше?).

1 голос
/ 22 марта 2012

Википедия: «В зависимости от деталей конкретного компьютера, ПК или IP-адрес содержит либо адрес памяти выполняемой инструкции, либо адрес следующей выполняемой инструкции» Я не могу быть уверен, но, возможно, удерживает следующую инструкцию для выполнения.

EDIT:

Возможно, вы найдете точный ответ, проверяя документацию по вашему процессору. Например, в микроконтроллере MSP430 начальным условием для ПК является адрес для вектора сброса. Поэтому проверьте документацию вашего процессора, чтобы найти начальные условия для регистров.

...