; Define memory locations for user input buffer and opcode output INPUT_BUFFER .WORD x2000 ; Memory location to store user input OPCODE_OUTPUT .WORD x2004 ; Memory location to store opcode output
字符串我试过了,可惜没用
kxkpmulp1#
您正在寻找.FILL ...来为初始化的数据字提供值,因为.word ...可以在其他汇编语言中工作。
.FILL ...
.word ...
INPUT_BUFFER .FILL x2000 OPCODE_OUTPUT .FILL x2004
字符串使用.BLKW ...来提供零初始化数据字的数量的计数。据我所知,没有equ或equate或#define或=来声明数字常量。但是.word也没有声明一个常量,它声明了一个初始化的数据字,这正是.fill所做的。(不同之处在于.word ...通常接受多个逗号分隔的值,而LC-3的.fill ...每行需要一个参数。)您可以将这些标签用于LC-3的间接加载和存储,LDI和STI。例如,
.BLKW ...
equ
equate
#define
=
.word
.fill
.fill ...
LDI
STI
LDI R0, INPUT_BUFFER
型将使用位于INPUT_BUFFER的数据存储器位置来获取要放入R0的值的地址。因此,指令本身引用INPUT_BUFFER,而INPUT_BUFFER存储x2000,这是用于从R0的存储器中获取的有效地址。也可以直接加载指针值:
INPUT_BUFFER
R0
LD R1, INPUT_BUFFER # now have x2000 in R1 LDR R0, R1, #0 # load from location at R1+#0, so x2000
型此外,您还可以在INPUT_BUFFER处增加/修改内存位置,
LD R1, INPUT_BUFFER ADD R1, R1, #1 ST R1, INPUT_BUFFER
型这会将INPUT_BUFFER的内存位置更改为x2001(假设它是从x2000开始的),因此,例如,下一个LDI或STI到该内存位置将最终寻址内存位置x2001。就我个人而言,对于小型算法,我更喜欢将指针加载到寄存器中并在那里使用它们,包括在循环中递增寄存器。LC-3有8个可用寄存器,与玛丽,HACK,LMC和其他一些相比,它是寄存器丰富的。
1条答案
按热度按时间kxkpmulp1#
您正在寻找
.FILL ...
来为初始化的数据字提供值,因为.word ...
可以在其他汇编语言中工作。字符串
使用
.BLKW ...
来提供零初始化数据字的数量的计数。据我所知,没有
equ
或equate
或#define
或=
来声明数字常量。但是
.word
也没有声明一个常量,它声明了一个初始化的数据字,这正是.fill
所做的。(不同之处在于.word ...
通常接受多个逗号分隔的值,而LC-3的.fill ...
每行需要一个参数。)您可以将这些标签用于LC-3的间接加载和存储,
LDI
和STI
。例如,型
将使用位于
INPUT_BUFFER
的数据存储器位置来获取要放入R0
的值的地址。因此,指令本身引用INPUT_BUFFER
,而INPUT_BUFFER
存储x2000,这是用于从R0
的存储器中获取的有效地址。也可以直接加载指针值:
型
此外,您还可以在
INPUT_BUFFER
处增加/修改内存位置,型
这会将
INPUT_BUFFER
的内存位置更改为x2001(假设它是从x2000开始的),因此,例如,下一个LDI
或STI
到该内存位置将最终寻址内存位置x2001。就我个人而言,对于小型算法,我更喜欢将指针加载到寄存器中并在那里使用它们,包括在循环中递增寄存器。LC-3有8个可用寄存器,与玛丽,HACK,LMC和其他一些相比,它是寄存器丰富的。