Как 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' находится слишком далеко, мы получим ошибку, потому что мы не можем представить это значение в смещении.

Другие вопросы по тегам