Как исправить ошибку «Смещение вне диапазона» с помощью инструкции LEA в сборке LC3 - PullRequest
0 голосов
/ 16 января 2019

Я только начинаю изучать сборку LC3 для своего класса организации машин. Мне нужно написать небольшую программу на ассемблере LC3, чтобы вычислить сумму списка положительных чисел, оканчивающегося на ноль. Моя программа должна начинаться с местоположения x3000, а мои данные (список чисел) должны начинаться с x4000. Я написал это:

.ORIG x3000
AND R1,R1,x0      ;clear R1 to be used for the sum
LEA R2,x4000      ;load the starting address of the data
LDR R3,R2,x0      ;load the next number to be added
LOOP ADD R1,R1,R3 ;add the next number to the sum
ADD R2,R2,x1      ;increment the pointer
LDR R3,R2,x0      ;load next number to be added
BRp LOOP          ;loop if next number is positive
HALT
.END

Но я получаю эту ошибку:

at line 3: while parsing the offset for a LEA: offset 16384 is out of range; 
it must fit into 9 bits, so it should be between -256 and 255, inclusive

Мне трудно понять, как именно я должен использовать инструкцию LEA, чтобы заставить ее делать то, что я хочу. Как мне это изменить?

Редактировать 3:

.ORIG x3000
AND R1,R1,x0      ;clear R1 to be used for the sum
LD R2,NUMBERS     ;load the starting address of the data
LDR R3,R2,x0      ;load the next number to be added
LOOP ADD R1,R1,R3 ;add the next number to the sum
ADD R2,R2,x1      ;increment the pointer
LDR R3,R2,x0      ;load next number to be added
BRp LOOP          ;loop if next number is positive
HALT
NUMBERS .FILL x4000
.END
...