Подскажите, почему после выполнения строки
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.
Спасибо!
Disassembler Keil stm32
-
shevelev_es
- Родился
- Сообщения: 11
- Зарегистрирован: Пт апр 01, 2016 11:31:24
- Реклама
- N1X
- Нашел транзистор. Понюхал.
- Сообщения: 197
- Зарегистрирован: Чт май 03, 2012 17:03:35
- Откуда: Гомель, Беларусь
Re: Disassembler Keil stm32
Дело в том, что увеличение регистра PC происходит сразу после выборки команды из памяти. Т.е. PC указывает на следующую инструкцию, а не на текущую.
-
shevelev_es
- Родился
- Сообщения: 11
- Зарегистрирован: Пт апр 01, 2016 11:31:24
Re: Disassembler Keil stm32
Спасибо. А про смещение - pc, #24, есть возможность пояснить.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Disassembler Keil stm32
Ну что там пояснять то? Чтение по адресу PC+24. Загляни что по адресу 0х0800011С лежит?

