计算机组成原理之指令和寻址方式

一 机器指令

能够被计算机CPU识别并且操作的命令,就是机器指令。软件通过指令告诉硬件干什么,硬件把结果和状态通过指令系统返回给软件。

1.1 指令的格式

操作码 地址码 寻址方式

1.1.1操作码

机器要做什么操作

1.1.2 地址码

第一种:四地址
在这里插入图片描述

A1: 第一个操作数地址
A2: 第二个操作数地址
A3: 结果的地址
A4: 下一条指令的地址,利用A4取下一条指令
假设指令字长为32位,操作码固定位8位,则剩余的24位分配给4个操作数,则每一个操作数是6位,寻址范围是2^6 =64,如图示:
在这里插入图片描述

很明显这样的范围是不够用,也不可用的。
第二种:三地址
在现代的计算机中,一般使用硬件程序计数器,来存储下一条要访问的指令,来代替A4. 那么4地址就可以变为3地址,从而可以增加每一个操作数的寻址范围。如图示:
在这里插入图片描述

那么每一个操作数可寻址范围就是2^8 = 256,即每一个地址码的长度增加了

第三种:二地址
在这里插入图片描述

我们将计算结果不再保存到A3地址中,而是保存到A1或者A2的地址中
地址码从三个变为2个,每一个地址码长度增加了,2^12 = 4096
如果我们不把结果保存在A1或者A2当中,而是保存在指定一个寄存器当中,比如放在ACC, 这样就可以减少访存次数。

第四种:一地址
只要我们知道一个操作数的在内存中地址和ACC,那么我们就可以把另外一个操作数和操作结果都放在ACC中,这样还可以继续增加地址码的长度,变为24位,为2^24 = 16M, 而且只需要2次访问内存
在这里插入图片描述

1.2 指令的字长

指令的字长取决于操作码和地址码,如果指令字长是可变的,那么地址码的个数对指令的字长也是有影响的。

二 操作数的类型和种类

2.1 操作数类型

地址:比如跳转指令,操作的就是地址
数字:定点数、浮点数、十进制数
字符:ASCII
逻辑数:逻辑运算

2.2 数据在存储器中存放方式

比如1 2 3 4 5 6 7 8 H

在这里插入图片描述

数据在存储器中存储方式(存储字长64位,机器字长32位)
存储字长:表示CPU在访问内存的过程中,一个存储单元(存储地址)所存储的二进制代码的位数,即存储器中的MDR的位数
机器字长:表示CPU一次能处理数据的位数,通常与CPU的寄存器位数有关

在这里因为机器字长是32位,所以1字=4字节;存储字长是64位,所以是双字,即2个32位

2.2.1 从任意位置开始编址

那可能一个数据是1个字(32位),也可能是半字(16位),也有可能是双字(64位)。
优点:存储紧凑,不浪费资源
缺点:读写控制比较麻烦

2.2.2 从一个存储字的起始位置开始:

在这里插入图片描述

优点:每一次都从一个存储字的起始地址开始。任何类型的数据都可以保证在一个主存周期内完成,读写控制简单
缺点:浪费内存资源

2.2.3 边界对准方式,从地址的整数倍位置开始:

如果是半字,即16位,2字节,则从地址是2的倍数的位置开始存储
如果是字,即32位,4字节,则从地址是4的倍数的位置开始存储
如果是双字,即64位,8字节,则从地址是8的倍数的位置开始存储
在这里插入图片描述

优点:可以保证任何类型,一个存取周期就可以读写的数据,是前两个方法的折中;也减少了存储空间的浪费。数据存放的起始地址是数据长度的倍数

2.3 操作的类型

2.3.1 数据传送

在这里插入图片描述

2.3.2 算术逻辑运算

加(add)、减(sub)、乘(mul)、除(div) 增1(inc) 减1(dec) 求补(cmp) 浮点运算
与(and) 或(or) 非(not) 异或(xor) 位操作

2.3.3 移位

2.3.4 转移

无条件转移:JMP
条件转移:JZ(结果为零转移),JO(结果溢出转移),跳过一条指令(SKP)

调用和返回:call return

2.4 陷阱和陷阱指令

陷阱:可预知的意外事件
陷阱指令:INT TYPE

三 寻址方式

3.1 什么是寻址方式

确定本条指令的操作数地址或者下一条要执行的指令的指令地址,说白了就是如何找到指令或者指令要操作的数据的地址。

所以寻址方式又可以具体分为指令寻址和数据寻址。

3.2 指令寻址

顺序寻址:取完一条指令,顺序取下一条指令,比如PC的地址加1,然后送入到PC当中,那这里是不是在任何一台计算机都是可以的?
如果内存存储单元编址单位是字节,每一条指令的长度是32位,即4个字节,顺序寻址的时候就是+4;如果是64位,则顺序寻址的时候就是+8。

跳跃寻址:由转移指令指出下一条指令它的地址
在这里插入图片描述

3.3 数据寻址

在这里插入图片描述

操作码:操作类型
寻址方式:使用哪一种寻址方式
形式地址:取决于寻址方式
假设指令字长=机器字长=存储字长

3.3.1 立即寻址

形式地址直接给出来的就是操作数,直接参与操作码指定的运算。
在这里插入图片描述

指令的执行阶段,不需要访存

3.3.2 直接寻址

有效地址就是形式地址,也就是是真正内存单元的物理地址。把A这个地址的操作数送到CPU的ACC寄存器中去。A地址的位数决定了该指令的寻址范围
缺点:操作数的地址不易修改

3.3.3 隐含寻址

我们把寻址方式隐藏到操作码之中

3.3.4 间接寻址

有效地址由形式地址间接提供。
指的是形式地址指向的是内存中一个地址,但是这个地址的值仍然是一个地址,即真实的地址,这种方式需要访存2次,而且便于编制程序。

3.3.5 寄存器寻址

有效地址即为寄存器编号,CPU需要从给定的编号的寄存器中把操作数取出来,进行相应的操作。

3.3.6 寄存器间接寻址

地址保存的是一个在寄存器中的地址,这个寄存器中的地址保存的是操作数真正在内存中的物理地址。

3.3.7 基址寻址

3.3.7.1 采用专用的寄存器作为基址寄存器

有效地址是基准寄存器中保存的内容+形式就可以得到内存的物理地址
优点:扩大了寻址范围,因为基址寄存器给定了一个首地址,然后指令中地址A只是一个偏移量;另外,非常有利于多道程序设计,多到程序分时进行执行的时候,程序的起始地址可以放在基址寄存器,执行过程中动态产生操作数地址,也叫动态定位。

在这里插入图片描述

3.3.7.2 基于通用地址寄存器作为基址寄存器

3.3.8 变址寻址

指定一个变指寄存器作为基址寄存器。用户可以修改变址寄存器的地址,这是和基址寄存器不一样地方。
在这里插入图片描述

3.3.9 相对寻址

用程序计数器中地址加上程序里的地址,形式地址相当于当前指令的位移量。
A的位数决定了相对地址的寻址范围。
在这里插入图片描述

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值