Учитывая PC = 0x32011C, значение находится в 0x32010C, тогда каково смещение? - PullRequest
0 голосов
/ 10 июля 2019

Интересно, может ли смещение адреса быть отрицательным? Например, ответ на мой вопрос отрицательный 16 байтов?

1 Ответ

1 голос
/ 10 июля 2019

Вероятно, лучше говорить о смещениях в конкретных инструкциях, таких как условные ветви или инструкции вызова.

В RISC V многие инструкции имеют 12-битное смещение, и все они подписаны и расширены до 32- или 64-битных (для RV32 или RV64 соответственно).(Некоторые инструкции имеют 20-битное смещение, некоторые из которых работают немного по-другому.)

ПК инструкции, выполняющей относительную к ПК адресацию, является базовым значением, которое добавляется к смещению - это означает, чтосмещение 0 означает текущую выполняемую инструкцию, +4 последующую 32-битную инструкцию и -4 предыдущую 32-битную инструкцию (в памяти по адресу, не обязательно в порядке выполнения).

Дляподдержка команд компактного формата (16 бит) и расширенных размеров команд (48 бит и более), смещение для инструкций, выполняющих относительную к ПК адресацию, обеспечивает четные значения смещения байтов - поскольку значение всегда четное, младший битвсегда равен нулю, и, следовательно, он не закодирован в смещении.Таким образом, смещение, закодированное в таких инструкциях, дополняется одним нулевым битом на младшем конце (как младший бит) перед использованием аппаратным обеспечением.

...