Определение смещения в LC3

Мне дали несколько строк кода и сказали написать соответствующие инструкции LC3. У меня проблемы с определением значения смещения.

Например:

x3100    1110001000100000

Итак, 1110 - это код операции для LEA. 001 означает R1. Остальное смущает меня. Я остался с 000100000. Глядя на список инструкций LC-3, синтаксис для LEA выглядит следующим образом

LEA-->  |1110|DR|PCoffset9|

Как мне выяснить, что такое PCoffset9 из моего кода? 000100000 - это число 32, так оно и есть:

LEA R1, #32    ;is this right?

Это не кажется правильным. Я думал, что вспомнил, что эти цифры были представлены как места памяти? Так что 000100000 будет х020? Я так запутался, как выяснить смещение.

1 ответ

Вы правы с нарушением этой инструкции. Оставшееся смещение 000100000 действительно составляет 32 в десятичном виде или x0020 в шестнадцатеричном.

Это смещение должно быть взято с конца текущей инструкции. Поскольку текущая инструкция находится на x3100, конец ее на x3101. Теперь вы добавляете 32 к этому номеру, и вы получаете адрес памяти, что это LEA имеет в виду. x3101 + 32 == x3121

Скорее всего, в обычной программе будет метка, определенная по этому адресу x3121. Таким образом, инструкция, кодирующая 1110001000100000, могла возникнуть из строки источника, например:

LEA R1, MYLABEL
Другие вопросы по тегам