计算机系统第五章: LC-3结构

ISA

  1. ISA是软件命令与硬件执行体之间的接口,
  2. ISA定义了软件编程所需要的必要而完整的描述,
  3. ISA叫instruction Set Architecture 指令集。
  4. 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种寻址模式:

  1. 立即数寻址模式,来源于指令
  2. 寄存器寻址模式
  3. 内存——相对寻址模式
  4. 内存——间接寻址模式
  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的偏移值。
计算方法

  1. 先把bit[8:0]内容16位扩展(符号扩展),然后和PC(已增量,就是PC+1,因为PC在Fetch节拍就已经加一,地址计算节拍在Fetch后边)相加。比如当前PC=x4018,立即数x1AF,相加为x3FC8=x4019+x1AF
  2. 如果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

循环控制的两种方法:

  1. 计数器方法:首先将计数器初始化为n,然后每一次循环将计数器减一然后判断计数器是否为0,如果不是则继续BR到循环入口继续循环,若是则跳出loop进行下一条指令操作。
  2. 哨兵计数法:事先不知道要循环多少次。比如你要循环一个地址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 关于指令的基本问题(其实是我忘了呜呜,太久没做了)

  1. R2内容转到R3. ADD R3,R2,#0 (我傻逼用了LDR,LDR是基址偏移,内存内容转寄存器里)
  2. 三条指令表是减法。 取反、加一、ADD
  3. 不影响任何寄存器内容情况下,基于R1内容设置条件码 : ADD R1,R1,#0或者AND R1,R1,#-1
    设置条件码的意思是设置上一条指令的目标寄存器内容
  4. 能不能通过一组指令,使得最后条件码为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,为不可写状态。记住。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341