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