计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集

目录

  • 前言
  • 冯诺依曼模型
    • 内存
    • 运算单元
    • 输入输出设备
    • 控制单元
  • 指令表示
  • 指令周期
  • LC-3寻址
  • LC-3指令集
    • 运算指令
    • 数据搬移指令
    • 流程控制指令
    • LEA
  • 题目
    • 5.15

前言

我爬

冯诺依曼模型

冯诺依曼模型是一种计算机架构模型,通过不同的设备组件实现复杂的可编程控制。
计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集_第1张图片

内存

内存基于门控存储电路,是一种临时存储设备,拥有读写两种操作。通过两个寄存器来实现读写:

名称 全名 作用
MAR Memory Address Register 对该寄存器内数字对应的内存地址进行操作
MDR Memory Data Register 内存操作的操作数。写时存放写的数据,读时存放读出来的数据

内存读写之 - - 读操作

  1. 将要读的内存地址放入 MAR
  2. 发 read 信号给内存,内存将 MAR 对应地址的数据存放到 MDR
  3. 从 MDR 中取数据

内存读写之 - - 写操作

  1. 将要写入的内存地址放入 MAR
  2. 将要写入的数据放入 MDR
  3. 发 write 信号给内存

运算单元

运算单元支持简单算数运算与逻辑运算,除此之外,运算单元需要寄存器来保存运算结果。

输入输出设备

通过 KBSR KBDR DSR DDR 来实现对键盘的读取和显示的输出。这些寄存器在后面的章节会详细介绍。

控制单元

通过 IR 和 PC 寄存器来实现指令的跳转。大部分情况在执行一条指令之后,PC都会++(顺序执行

名称 全名 作用
IR Instruction Register 存放当前指令的内容。
PC Program Counter 存放下一条要指向的指令的地址

指令表示

通过二进制数字来表示指令,一条完整的指令需要两个部分

  1. 指令代号
  2. 操作数

比如 ADD 指令,我们需要将 src1 src2 寄存器 中的数字相加,然后存到 dst 寄存器中
计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集_第2张图片

指令周期

一个指令被执行的全过程。

  1. 取指令:根据 PC 寄存器从内存处取出指令的内容
  2. 译码:知晓到底执行哪条指令(指令的高4位对应代号)
  3. 地址计算:有的指令需要存取内存,需要进行地址计算,比如 PC + 偏移 寻址
  4. 取操作数:从寄存器中取操作数
  5. 执行:- - - - -
  6. 存放结果:将执行结果存放到寄存器或者内存

LC-3寻址

根据操作数,从对应的内存地址中获取数据的行为,叫做寻址。LC-3中有三种方式获得内存中的数据。

  1. 非内存寻址:直接从寄存器中取数
  2. 直接寻址:通过指令中 操作数指定的寄存器 中的内容找到内存对应地址处的数据
  3. 间接寻址:通过 pc+偏移 找到内存对应地址处的数据,其中偏移在指令的操作数中给出

LC-3指令集

LC-3是一种非常原始的指令集,它具有以下的特点:

  1. 寻址空间为 16 bit 即一条指令长16bit
  2. 地址空间为 16 bit,即 0 ~ 2^16 这么多地址可用
  3. 有8个通用寄存器可以读写。3bit 表示一个寄存器
  4. 拥有15个操作码,即15种不同的指令,4bit表示一条指令

除此之外,还有系统状态寄存器等等不可访问的寄存器。比如 nzp 条件码,nzp表示最后一次操作的结果,是负,零,正数。下面的指令表中,带+号的表示会改变nzp条件码。
计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集_第3张图片

运算指令

ADD 和 AND,都有两种模式,即立即数模式和寄存器模式。立即数是跟在指令后面的几位数字,通常用于简易运算,比如++运算中。
计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集_第4张图片

比如加法,立即数模式下,DR = SR + imm

特殊运算:按位取反
在这里插入图片描述

数据搬移指令

LD, LDI, LDR,ST,STI,STR

数据搬移指令分为读写两部分,先介绍读指令:

计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集_第5张图片

其中 LD 和 LDR 为直接寻址。LD使用 PC+偏移 找到内存地址并且取数据。LDR使用 基址寄存器内的数值+偏移 的方式找到内存地址并且取数据。

LDI 是间接寻址模式,即先找到内存PC+偏移 处的数据 x,将 x 作为地址,找内存 x 地址处的数据为最终结果。(即指针寻址)

ST 系列的指令是写操作,和读操作一致,故不重复细,直接图
计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集_第6张图片

流程控制指令

通过流程控制指令实现跳转与分支。其中

BR指令较为特殊,根据 nzp (某个寄存器中的字段)来确定是否跳转(有条件)。nzp表示 负,零,正。其中某些运算指令能够改变 nzp 的值,比如 ADD AND NOT LEA 等等

JMP 是绝对跳转,无条件。

JSR 与 JSRR 是函数(栈帧)调用时的跳转,会将返回地址压栈,并且改写系统状态,这在后面的章节细。

计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集_第7张图片

除此之外,TRAP是中断函数的调用,这个也会改变系统状态,后面细
在这里插入图片描述

LEA

LEA指令比较特殊,他是计算地址的指令。将 PC+偏移 的值计算好,存入目标寄存器。值得注意的是,LEA指令并不访问内存,仅仅只是计算而已。所以有时候可以用LEA进行简单的加减法。
在这里插入图片描述

题目

5.15

计算机系统(一)期末复(yu)习(2):冯诺依曼模型,指令与指令周期,LC-3指令集_第8张图片
先将指令翻译一下:

LEA 	R1		32		即 R1 = pc + 0x20 = 。当前 pc = 0x3101(由左边可得),那么 R1 = 0x3121
LD		R2		32		即 R2 = 内存[pc+0x20]。当前 pc = 0x3102,那么 R2 = 内存[0x3122] = 0x4566
LDI		R3		32		即指针寻址 R3 = 内存[内存[pc+0x20]] = 内存[内存[0x3123]] = 内存[0x3567] = 0xABCD
LDR		R4	R2	1		即基址+偏移寻址。R4 = 内存[R2的值 + 1] = 内存[0x4566 + 1] = 0xABCD

哦 有答案了,那没事了

你可能感兴趣的:(计算机系统,lc-3,指令集,汇编)