Определение смещения в 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