目录
碎碎念念
LC-3指令
运算类指令
ADD (addition)
AND (Bit-wise logical AND)
NOT (Bit-wise complement)
数据搬移类指令
LD (load)
ST (store)
LDI (load indirect)
STI (store indirect)
LDR (load base+offset)
STR (store base+offset)
LEA (load effective address)
控制类指令
BR (conditional branch)
JMP (jump)
RET (return)
JSR (jump to subroutine)
JSRR
RTI (return from interrupt)
TRAP (system call)
注释
DR
SR
imm5
BaseR
offset6
PCoffset9
PCoffset11
trapvect8
n z p
+
我们在上一期介绍了LC-3的指令构成还有一些注释含义,这一期我们逐条来讲解指令,LC-34-bit的操作码字段可以定义16种指令,在LC-3的ISA中,操作码值1101没有定义,所以LC-3一共有15条指令。如果有些概念不清楚,可以先看后面的注释。
加法运算:
bit[5]是0代表寻址方式为寄存器寻址,将SR1与SR2相加的结果放在DR中;
bit[5]是1代表寻址方式为立即数寻址,将SR1与imm5字段的立即数的16位扩展值相加的结果放在DR中。
按位与运算:
bit[5]是0代表寻址方式为寄存器寻址,SR1与SR2按位与运算的结果放在DR中;
bit[5]是1代表寻址方式为立即数寻址,SR1与imm5字段的立即数的16位扩展值按位与运算的结果放在DR中。
按位取反:
将SR按位取反的结果放在DR。
读取数据:
相对寻址(PC-relative),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容存进DR。
写入数据:
相对寻址(PC-relative),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将SR的内容存进该地址所指向的内存单元。
读取数据:
间接寻址(indirect),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容作为地址,将此地址所指向的内容存进DR。
写入数据:
间接寻址(indirect),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容作为地址,将SR的内容存进此地址所指向的内存单元。
读取数据:
基址偏移寻址(base+offset),offset6字段的16位扩展值和BaseR的内容相加得到一个地址,将该地址指向的内容存进DR。
写入数据:
基址偏移寻址(base+offset),offset6字段的16位扩展值和BaseR的内容相加得到一个地址,将SR的内容存进该地址指向的内存单元。
立即数寻址,PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址存进DR。
条件跳转:
根据NZP的值来进行指定检测条件码,如果n为1,则检测N条件码;如果z为1,则检测Z条件码;如果p为1,则检测P条件码。如果被检测的条件码为1,则程序跳转到PCoffset9字段的16位扩展值和增量PC相加得到的地址处。
注意,如果nzp均为1,则无条件跳转,因为NZP条件码必有一个为1;
如果nzp均为0,则不管怎样都不跳转,因为不去检测。
无条件跳转:
程序无条件跳转到BaseR的内容所指定的地址处。
无条件跳转:
程序无条件跳转到R7的内容所指定的地址处,而R7的内容是指向子程序调用指令后的指令地址,实际上就是从子程序跳回来。
RET可以看作是JMP的一个特例。
无条件跳转:
PCoffset11字段的16位扩展值和增量PC相加得到的地址作为子程序的入口地址,程序进入子程序,增量PC保存在R7中(参见RET指令,用于从子程序跳回来)。
无条件跳转:
BaseR的内容作为子程序的入口地址,程序进入子程序,增量PC保存在R7中(参见RET指令,用于从子程序跳回来)。
如果当前处理器运行在特权模式,那么特权模式栈顶部两个单元的内容被弹出,分别赋值给PC和PSR。
如果当前处理器运行在用户模式,那么将引发“特权模式冲突”的异常。
程序进入由trapvect8指定的系统调用的服务程序,增量PC保存在R7中,参见RET指令,用于从服务程序跳回来。
Trap服务程序
陷入矢量 | 汇编器名 | 描述 |
---|---|---|
x20 | GETC | 从键盘读入一个字符。 |
x21 | OUT | 在屏幕上显示字符。 |
x22 | PUTS | 在屏幕上显示一个字符串,每个内存单元存放一个字符。 |
x23 | IN | 在屏幕上显示提示,读入一个字符,并在屏幕上显示该字符。 |
x24 | PUTSP | 在屏幕上显示一个字符串,每个内存单元存放两个字符。 |
x25 | HALT | 停止执行,并在屏幕上输出信息。 |
目的寄存器(destination register)。
SR、SR1、SR2等等是指源寄存器(source register)。
5-bit的立即数(immediate value),它是补码的形式。
基址寄存器(Base Register),它和一个6-bit偏移相加产生Base+offset地址。
6-bit补码,用于Base+offset寻址模式。
9-bit补码,用于PC+offset寻址模式。
11-bit补码,用于JSR指令计算子程序的入口地址。
8-bit无符号整数,用于TRAP指令确定服务程序的入口地址,间接寻址模式,该地址的内存单元存放了服务程序的入口地址。
条件码,LC-3有三个位寄存器:N、Z和P,即负数(negative)、0(zero)和正数(positive),当任意寄存器被写入时,根据写入的是负数、0还是正数分别设置相应的条件码为1,其他为0。
指令的汇编语言形式右上角的+号表示该指令将改变条件码。