Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Disassembler Keil stm32

Вс апр 14, 2019 18:14:23

Подскажите, почему после выполнения строки
0x08000100 4806 LDR r0,[pc,#24] ; @0x0800011C
в регистр R0 оказывается адрес 0х08000BE9
понимаю, что это связано с адресом SystemInit, но почему на единицу больше.
И второе, команда LDR r0,[pc,#24] - должна записать в R0 текущее значение PC+24. В начальный момент PC = 0x08000100. Если прибавить 24, то = 0х08000124, а на 0x08000BE9.

Никак не могу найти информацию. Все справки пишут - записать значение в регистр такой- то, значение PC со смещением. В данном случае смещение 24, а результат 0x08000BE9.

Спасибо!
Вложения
next.png
(109.39 KiB) Скачиваний: 418
start.png
(113.4 KiB) Скачиваний: 171

Re: Disassembler Keil stm32

Вс апр 14, 2019 22:57:19

Дело в том, что увеличение регистра PC происходит сразу после выборки команды из памяти. Т.е. PC указывает на следующую инструкцию, а не на текущую.

Re: Disassembler Keil stm32

Пн апр 15, 2019 17:16:22

Спасибо. А про смещение - pc, #24, есть возможность пояснить.

Re: Disassembler Keil stm32

Пн апр 15, 2019 17:44:02

Ну что там пояснять то? Чтение по адресу PC+24. Загляни что по адресу 0х0800011С лежит?
Ответить