Как LEA инструкция хранит адрес A?
Это основано на этом вопросе инструкции LEA
Вот сегмент кода, у меня есть вопрос о
.ORIG X3700
LEA R0, A
.....
A .FILL X1234
@Paul R, отвечающий на ответ, сказал, что "источником кода является x3700, и у вас есть 12 инструкций, поэтому адрес A будет x3700 + x0C = x370C. Как вы уже догадались, LEA R0,A загружает адрес A в R0, поэтому R0 будет содержать x370C после того, как будет выполнена первая инструкция."
Я согласен с первой частью сказанного Полом, его рассуждений о том, почему адрес А равен x370C. В этом есть смысл.
Меня смущает следующая часть: "LEA R0, A загружает адрес A в R0". Это слайд, на который я ссылаюсь по инструкции LEA. Lc3 LEA, 5-23
В отличие от команд ADD и AND, инструкция LEA имеет только один режим (ссылка указывает оба режима для ADD и AND.
Согласно этой диаграмме, вторая часть LEA, A должна быть PCoffset 9. Однако значение A составляет 4660(в десятичном виде) от A .FILL X1234, которое выходит за пределы диапазона PCoffset 9, который составляет от -256 до 255).
Кто-нибудь может объяснить, что происходит? Я использую неправильную диаграмму в качестве ссылки? Есть еще один режим LEA?
1 ответ
Каждый раз, когда вы видите PCoffset как операнд кода операции
LEA R2, A ; Loads the memory location of A into R2
; LEA, DR, PCoffset9
Он говорит вам, что когда ваш код собран, он фактически не помещает метку "А" в вашу команду LEA.
Возьмите следующий код:
.ORIG X3700 ; Not a code line in the simulator, only used by the assembler
LEA R0, A ; Line 1, starting at x3700
HALT ; Line 2
A .FILL X1234 ; Line 3, located at x3702
.END ; Not a code line in the simulator, only used by the assembler
Теперь в симуляторе линия LEA на самом деле выглядит так:
1110 000 000000001 ; Opcode 1110 is LEA
; 000 is our register R0
; 000000001 gives us how many memory locations away A is
И это то, что означает смещение. Он задает вопрос "Сколько блоков памяти А от меня?" и если наша переменная 'A' находится слишком далеко, мы получим ошибку, потому что мы не можем представить это значение в смещении.