ISA
- ISA是软件命令与硬件执行体之间的接口,
- ISA定义了软件编程所需要的必要而完整的描述,
- ISA叫instruction Set Architecture 指令集。
- ISA给出了内存组织方式、寄存器组、指令集(操作码、数据类型、寻址模式等)
- 内存组织
LC-3可寻址空间大小为2^16(之前说过MAR是16bit的),寻址基本单位是16位(MDR是16bit)
- 寄存器
LC-3和大多数机器一样提供了临时存储空间,他们的访问速度是一个周期(内存访问速度大于一个周期)。临时存储空间的实现方式最常见就是寄存器。
LC-3有8个通用寄存器,每个寄存器存储单位是一个“字”,在LC-3里就是16bit。
Register的特性和memory是一样的:具有记忆特性和独立寻址(标识就是R0-R7)
- 指令
操作码占4bit,表示可以有16个指令。
指令可分为三类:运算、数据迁移、控制
运算类指令负责处理信息,数据迁移类指令负责在内存、寄存器之间以及输入输出设备之间转移信息,控制类指令负责改变执行的顺序。
- 寻址模式
是定义操作数位置(或来源)的一种机制。有5种寻址模式:
- 立即数寻址模式,来源于指令
- 寄存器寻址模式
- 内存——相对寻址模式
- 内存——间接寻址模式
- 内存——基址寻址模式
- 条件码
LC-3具有三个位寄存器,每当8个通用寄存器中任意一个被修改或写入,三个bit位就会发生对应的变化(N Z P清0或置1),其中NZP位分别表示负、零、正。
操作指令
操作指令是处理数据的指令,其中运算指令是典型的操作指令。
- NOT指令(1001)
特点:唯一的单操作数指令。NOT指令对目标操作数和源操作数都是寄存器寻址模式
作用:对16位源操作码进行按位取反,并将结果存入到目标寄存器。
汇编代码示例:
NOT R1 R2 //将R2进行NOT运算存到R1
- ADD指令(0001)
特点:双操作码指令。ADD指令对目标操作数是寄存器寻址模式,
bit[5]=0,则说明对两个源操作数都是寄存器寻址模式;
bit[5]=1,第一个操作数是寄存器寻址模式,第二个操作数是立即数模式。
作用:ADD指令执行2个操作数的补码加法
汇编代码示例:
ADD R1, R2, R3 // R2+R3结果存入R1.
ADD R1, R2, #5 //R2内容+5结果存入R1
- AND
特点:同ADD。
作用:将2个源操作数按位与相加,结果存入目标寄存器。
汇编代码示例:
AND R1, R2, R3 // R3 AND R2 store in R1.
AND R1, R2, #3 //就是与0011按位与
数据迁移类指令
第五章只讨论内存和寄存器之间的数据迁移。
数据迁移类指令有7种:LD、LDR、LDI、ST、STR、STI、LEA
- PC相对寻址
LD(0010)和ST(0011)
都是PC相对寻址模式。指令种bit[8:0]代表的是相对当前PC的偏移值。
计算方法:
- 先把bit[8:0]内容16位扩展(符号扩展),然后和PC(已增量,就是PC+1,因为PC在Fetch节拍就已经加一,地址计算节拍在Fetch后边)相加。比如当前PC=x4018,立即数x1AF,相加为x3FC8=x4019+x1AF
- 如果bit[8:0]易计算,可以直接化为10进制去相加。
作用: LD是将相对应内存单元的内容存入目的寄存器中。 ST是将目标寄存器的内容存入相对应内存单元
注意:PC相对寻址的范围为-255~256
操作原理:
LD:将已增量的PC与IR[8:0]相加,得出结果装入MAR; 读取相对应内存单元内容装入MDR;将MDR内容存入目的寄存器。
ST:将已增量的PC和IR[8:0]相加,得出结果装入MAR;将目的寄存器内容装入MDR;将MDR内容存入到相对应内存单元。
汇编代码示例:
LD R2,x1F // 当前PC+1+x1F。
LD R2,#2 //当前PC+1+2
- 间接寻址
LDI(1010)和STI(1011)都是间接寻址模式。
首先采用和PC相对寻址一样的方法算出一个地方,只不过这个地址存储的不是要提取的内容,该地址存储的是下一个地址,而下一个地址才存储了要读取的内容(就像找到一个线索,这个线索是下一个线索,而下一个线索才有答案)
特点:这种方法可以寻址的范围是任意位置,因为你只要在PC寻址范围内的内存单元存储随意一个地址,就可以飞过去了。
作用:将地中地的内存单元内容存储到目标寄存器(LDI)或将目标寄存器的内容存储到地中地内存单元
汇编代码:LDI R2,x1F //当前PC+1+x1F得出另一个地址,然后保存到那个地址内容的内存单元中
操作原理:已增量的PC与IR[8:0]相加,并将结果存入MAR寄存器,然后将相对应地址的内容读入MDR,然后将MDR内容装入MAR,再次读取相对应的的内存单元内容,装入MDR,然后MDR内容装入到目标寄存器。(LDI)
- 基址偏移寻址
LDR(0110)和STR(0111)采用基址+偏移的寻址模式。
既由6-bit的偏移量符号扩展和基址寄存器相加而来。6-bit补码可表示范围为-32~+31,同样可以去任何范围。
汇编代码表示:LDR R1,R2,#1. LDR R1,R2,x001
操作原理:将基址寄存器内容与IR[5:0]相加,结果装入MAR中,其次将相对应内存内容装入MDR,随后装入目标寄存器中。
- 立即数寻址
LEA(1110)采用立即数寻址,LEA是唯一一个使用该寻址模式的,有效地址装载指令。
作用:对寄存器做初始化,既向寄存器装入一个地址值。LEA是唯一一个无需访问内存的load指令。
汇编代码表示 : LEA R5,#-3 就是装入当前PC+1 -3的地址。
控制指令
控制指令是那些能够改变执行顺序的指令,有条件跳转、无条件跳转、子程序、TRAO、中断返回。
- 条件跳转指令
BR(0000),其中bit[11:9]对应n\z\p位(注意不要写错顺序),所有会对寄存器有操作的指令都会设置这三个条件码。
作用:条件跳转指令通过对条件码的判断来决定是否更改指令流(既改变指令执行顺序)。在执行节拍,处理器将检测某个条件码是否为1.N、Z、P分别表示负零正,如果三个全为0则不检查任何条件码。如果位1,则看上一条指令对寄存器的操作满不满足条件。(三个条件码全为1则是无条件跳转)
汇编代码如下:BRnp x185 // 如果满足np条件则跳转到PC+1+x185
BRnp x300A //满足条件跳转到x300A
循环控制的两种方法:
- 计数器方法:首先将计数器初始化为n,然后每一次循环将计数器减一然后判断计数器是否为0,如果不是则继续BR到循环入口继续循环,若是则跳出loop进行下一条指令操作。
- 哨兵计数法:事先不知道要循环多少次。比如你要循环一个地址x3000-x300A,可以在x300A放个哨兵比如要计算正数,你可以放-1.要计算数字,你可以放‘#’等。然后一样这样去判断。
- JMP指令
JMP(1100)。条件跳转指令跳转的范围有限,可计算范围是PC寄存器和偏移量的求和。范围是当前跳转指令前后+256~-255.所以就有了JMP指令。
作用:JMP指令就是将寄存器(bit[8:6])内容装入PC寄存器。
- TRAP 指令
TRAP(1111)这里只做简单介绍。指令改变PC内容,使其指向操作系统所在的空间内部。
trap x20
trap x21 显示器字符输出
trap x23 读取键盘输入
trap x25 终止程序
作业部分
5.2 可寻址宽度
如果内存可寻址宽度为64bit ,则MDR为64bit,与MAR没有关系。 (可寻址宽度为64bit是指MDR,可寻址空间是MAR,可寻址能力是MDR,可寻址宽度是nmgcz?)
5.10 BR与JSR相似与区别(其实我答上了但是不是很好)
BR和JSR相似之处就是他们都会改变PC的值,然后下一步就会跳转到PC值表示的地址去。
不同之处在于,BR不改变R7,既跳转之后不会返回。JSR在跳转之前会改变R7值(pc+1),然后跳转到‘函数体’内,执行完毕后执行RET指令,既把R7值装入PC,然后跳转。
5.13 关于指令的基本问题(其实是我忘了呜呜,太久没做了)
- R2内容转到R3. ADD R3,R2,#0 (我傻逼用了LDR,LDR是基址偏移,内存内容转寄存器里)
- 三条指令表是减法。 取反、加一、ADD
- 不影响任何寄存器内容情况下,基于R1内容设置条件码 : ADD R1,R1,#0或者AND R1,R1,#-1
设置条件码的意思是设置上一条指令的目标寄存器内容 - 能不能通过一组指令,使得最后条件码为N=1,Z=1,P=0呢?
答:不能,因为N=1,Z=1,P=0就要求寄存器的内容既是负数又是零,不存在这样的内容。
5.17 关于访问内存次数
FETCH节拍就只有一次访问内存,就是将PC内容的地址存到MAR之后,从内存读取指令到MDR,只有这一次。
所以LD有2次访问内存,FETCH和执行节拍将内存的内容装入MDR;
LDI有3次访问内存,FETCH和进行了两次执行节拍??(目前我只能想到这么解释了)
LEA只有1次访问内存,就是FETCH节拍,然后执行地址计算,就存入到目标寄存器了,没有访问内存。
5.26 trapvector左移
TRAP指令提供128个操作系统服务程序,通过trapvector左移5位直接形成这些服务程序入口,则一个服务程序占有内存2^5=32字节,128个4kb
(不太清楚,等学到trap再回来解释)
5.40 局部逻辑
当指令不是BR等控制指令时,通过译码器输出有一个是为1,然后WE=1(可写状态),D为寄存器内容。当BR指令的时候,WE为0,为不可写状态。记住。