Assembly 将寄存器内容打印到LC3组件中的控制台
假设我有一个值(如1234),我将其加载到R0中。如何将此值打印到控制台 我假设您想在控制台上打印一个数字,但如果有任何问题,您会得到随机字符 当LC3试图将您的数字解释为ASCII字符时,就会发生这种情况。示例:ASCII中的数字8是退格字符 要使程序正常工作,您需要在数字上添加48(十进制)或x30(十六进制),然后才能将其打印到控制台Assembly 将寄存器内容打印到LC3组件中的控制台,assembly,lc3,Assembly,Lc3,假设我有一个值(如1234),我将其加载到R0中。如何将此值打印到控制台 我假设您想在控制台上打印一个数字,但如果有任何问题,您会得到随机字符 当LC3试图将您的数字解释为ASCII字符时,就会发生这种情况。示例:ASCII中的数字8是退格字符 要使程序正常工作,您需要在数字上添加48(十进制)或x30(十六进制),然后才能将其打印到控制台 .ORIG x3000 AND R0, R0, #0 ; Clear R0 LD R0, NUM ; load our numb
.ORIG x3000
AND R0, R0, #0 ; Clear R0
LD R0, NUM ; load our number into R0
LD R2, ASCII ; load the ascii offset into R2
ADD R0, R0, R2
OUT
HALT ; Trap x25
NUM .fill x02 ; Our Number to print
ASCII .fill x30 ; Our ASCII offset
.END
在您的示例中,您希望打印出一个字符数组,如1234。这个概念非常相似,但我们需要使用指针和for循环
.ORIG x3000
AND R0, R0, #0 ; Clear R0
AND R1, R1, #0 ; Clear R1
AND R3, R3, #0 ; Clear R3
LEA R0, NUM ; pointer [mem]NUM
ADD R1, R1, R0 ; Store the pointer address of R0 into R1
LD R2, ASCII ; load the ascii offset into R2
FOR_LOOP
LDR R4, R1, #0 ; load the contents of mem address of R1 into R4
BRz END_LOOP
ADD R4, R4, R2 ; Add our number to the ASCII offset
STR R4, R1, #0 ; Store the new value in R4 into [mem] address R1
ADD R1, R1, #1 ; move our memory pointer down one
BRnzp FOR_LOOP ; loop again until we get an x00 char
END_LOOP
PUTs ; print our string starting from [mem]address in R0
HALT ; Trap x25
ASCII .fill x30 ; Our ASCII offset
NUM .fill x01 ; Our Number to print
.fill x02
.fill x03
.fill x04
.END
请参阅您正在使用的模拟器/仿真器的手册,查看是否有任何例程可以调用以打印整数。否则,请查看是否有打印字符串的例程。在这种情况下,您必须首先将整数转换为字符串。我可以使用PUTS打印一个从R0中存储的值开始的字符串。在这种情况下,我如何将我的值转换为字符串?只有在使用未打包的BCD存储您的号码时,这才有效。如果在一个寄存器(或字节内存位置)中有一个像123这样的二进制整数,则没有帮助。