LC-3指令集是相当基础的计算机指令集,使用3位标识寄存器,因此有8个寄存器,而一条指令是16位,下面介绍一下常用指令
指令
ADD : 加,注意是立即数模式还是源目模式
AND : 按位与,注意是立即数模式还是源目模式
LD : 直接寻址,读内存(PC+偏移)存储的值到目的寄存器DR,即 DR = M[pc + offset]
ST :直接寻址,将寄存器SR的值写入到目的地址对应的内存,即 M[pc + offset] = SR
LDI : 间接寻址(指针),读内存(PC+偏移)存储的值作为地址(指针)p,再读取p对应的内存值到目的寄存器DR,即DR = *M[pc + offset]
STI :间接寻址(指针),将寄存器SR的值写入指针p(pc+偏移地址存放的值)对应的内存中,即 *M[pc + offset] = SR
LDR :基址+偏移寻址,将【base寄存器的值+offset】地址存储的数据读取到目的寄存器DR,即DR = M[R[base] + offset]
,其中 R[base] 表示取base寄存器存放的值
STR :基址+偏移寻址,将源寄存器SR的值写入到内存的【base寄存器的值+offset】地址里,即 M[R[base] + offset] = SR
LEA :计算有效地址,将pc+offset的值存放到寄存器DR,不访问内存,只是做加法
图片来自《计算机系统概论&.扫描版》第二版
再注:
该书第三版中 LEA 不能改变 condition code 了,但是第二版中仍然可以。要注意下用的是第几版的教材
条件码与BR语句
条件码是跳转语句BR所依赖的条件,有三个标志位表示状态,这三个状态分别是 N,Z,P,代表负数,正数,零,而这个状态的来源是最近一次写入的寄存器
BR语句
BR语句决定了下一次是否跳转,根据条件码来决定,而跳转的目标地址是 pc+offset,具体是什么情况跳转,取决于 BR[11:9]
里面的nzp
的值
注意事项
- 状态来源于最近一次被写入的寄存器
- 跳转的目标地址是 pc+offset
- 一共有7条语句可以修改条件码,他们分别是:ADD,AND,LD,LDI,LDR,LEA,NOT
绝对跳转
jump 是无论 任何时候都会跳转的