如何有效地将 lc-3 寄存器设置为“1000000000000000”?
How can I set an lc-3 register to "1000000000000000" efficiently?
我可以使用 5 个空寄存器。它们被设置为零。我想有效地将寄存器设置为上面的数字。
AND R1, R1, #0 ;
ADD R1, R1, x8000
"x8000" 是我要放入寄存器的数字的十六进制。我认为上面的代码不起作用,因为只有 5 位二进制数可以传递给 add 指令的即时值。它们稍后被零扩展为 16 位。因此尝试传递一个 16 位数是行不通的。这是我正在处理的程序的一小部分。
你说得对,当你使用 ADDi(立即数)时,你只能使用 -16 到 15 之间的数字来添加到寄存器中。
您可以反复使用 ADDi 命令,直到寄存器中有您想要的数字(不推荐),或者您可以从内存中加载常量。
.orig x3000
MAIN
AND R1, R1, #0 ; Clear R1
LD R2, VAR_1 ; Load x8000 into R2
ADD R1, R1, R2 ; R1 = R1 + R2
HALT
; Variables
VAR_1 .FILL x8000
.END
我可以使用 5 个空寄存器。它们被设置为零。我想有效地将寄存器设置为上面的数字。
AND R1, R1, #0 ;
ADD R1, R1, x8000
"x8000" 是我要放入寄存器的数字的十六进制。我认为上面的代码不起作用,因为只有 5 位二进制数可以传递给 add 指令的即时值。它们稍后被零扩展为 16 位。因此尝试传递一个 16 位数是行不通的。这是我正在处理的程序的一小部分。
你说得对,当你使用 ADDi(立即数)时,你只能使用 -16 到 15 之间的数字来添加到寄存器中。
您可以反复使用 ADDi 命令,直到寄存器中有您想要的数字(不推荐),或者您可以从内存中加载常量。
.orig x3000
MAIN
AND R1, R1, #0 ; Clear R1
LD R2, VAR_1 ; Load x8000 into R2
ADD R1, R1, R2 ; R1 = R1 + R2
HALT
; Variables
VAR_1 .FILL x8000
.END