计算机组成原理(四)

十五、数的定点表示和浮点表示

(一)定点表示

A、为什么要使用定点表示?

计算机没有固定硬件表示小数点,只能通过约定小数点在数据中的位置来确定小数点位置。

B、定点方式

计算机组成原理(四)_第1张图片

  • 小数定点机:小数点在符号位后;整数定点机:小数点在数据位后;
  • 整数定点机下,为何补码表示的方法能够比原码方式多保存一位?
    1. Sf是符号位。原码表示方式,数据最小为:11111..(一共n+1个1),即-(2^n -1);
    2. Sf是符号位,举个例子更明显:假设n是4,那么数据位和符号位一共5位,原码表示最小位是11111(5位),原码表示法不能再小,比如末尾加一,100000(第一位要被截去是00000,又为0了),我们取100000(6位)补码发现为011111(6位)最高位0被截去,还是11111(五位),故补码能用五位表示出六位的大小,即-2^n。

(二)浮点表示方式

A、为什么要引入浮点表示方式?

  1. 定点方式保存的数据范围太小,需要程序猿来调整小数点位置,增加编程难度;
  2. 数据容易占用大量空间,比如太阳质量用定点表示就是0.2 * 10^34克,电子的质量是0.9 * 10^-27,要对这两个数据进行运算,2^x > 10^(34 + 27),解得x>203,需要占用多于203个存储位。
  3. 因为上面,存储单元的利用率往往很低,比如电子质量要占用很多位,且都为0。

B、浮点数的表示方法

  • 由科学计数法引入:
    1. 科学计数法是将小数点中间0太多的数的简化表达,形式为 x * 10^n (|x| <=10);
    2. 例如:130000000 = 1.3 * 10^8;
  • 计算机的浮点数表示(与科学计数法类似)

计算机组成原理(四)_第2张图片

  • 规格化数:|S| <=0;
  • 例如有二进制数:11.0101,那么浮点数表示有下面几种可能
    • 0.110101 * 2^10   (注:这里指数10是二进制,为2)(注:此种表示方法即为规格化数,满足S绝对值<=1)
    • 110.101 * 2^(-1)
    • 0.0110101 * 2^011
    • 1.10101 * 2^1  

C、浮点数的存储

默认使用2作为尾数的基值,那么只需要保存位数和阶数即可,他们的结构如下:

计算机组成原理(四)_第3张图片

  • Sf代表浮点数的符号
  • n的位数反映浮点数的精度
  • m的位数反映浮点数表示的范围
  • jf 和 m 共同表示小数点的实际位置。 

D、浮点数的范围(在C的基础上)

计算机组成原理(四)_第4张图片

  • 当阶数为2^m -1 时为最大11111...(m个1),此时小数点向右移动最大位。
  • 当阶数为-(2^m -1)时为最小为-11111...(m个1),此时小数点向左移动最大位。
  • 当尾数为1-2^(-n)时为正数最大为111...(n个1),取反为负数最小。
  • 当尾数为2^(-n)时为正数最小为000...001(一共n-1个0),取反为负数最大。
  • 因此上面公式略微修改更加清楚:
    • 最小负数:-(1-2^-n) * 2^(2^m - 1)
    • 最大负数:-2^-n  * 2^[-(2^m-1)]
    • 最小正数:2^-n  *  2[-(2^m-1)]
    • 最大正数:(1-2^n) * 2^(2^m-1)
    • 仅仅改变了顺序和符号位置,更符合上面公式,尾数在前面
  • 如果发生下溢,按机器零来处理,如果发生上溢,则会报计算错误

E、规格化浮点数的范围

  • 首先复习规格化定义,即S(尾数)的绝对值满足:0<|S|< 1,这就要求我们数值位第一位必须是1,来保证S的的规格化。
  • 如上,那么上面总结的公式就有变化,我们用例子来说明:m(阶数的数值位)=4 n(尾数数值位)=10 r(尾数的基数)=2
    •  最大正整数:2^+1111    *    0.11111...(小数点后,10个1),此公式与上无变化,因为满足规格化要求。
    • (按上面公式,非规格化)最小正整数:2^-1111    *  0.0000...01(小数点后,9个0,1个1),可见这种0.0,小数点后不是1,不满足规格化方式。(满足规格化方式)最小正整数:2^-1111   * 0.1000..(小数点后1个1,9个0),所以最小正整数就是:2^-15 * 2^-1 =2^-16;
    • 按上面公式,非规格化)最大负整数:-2^-1111  *  0.00..001(小数点后,9个0,1个1);(规格化)最大负整数:-2^-1111  *  0.10000..(小数点后1个1,9个0);所以最大负整数就是:-2^-15  * 2^-1 = -2^-16;
    •  最小负整数:-2^+1111    *    0.11111...(小数点后,10个1),此公式与上无变化,因为满足规格化要求。

F、练习

计算机组成原理(四)_第5张图片

  • 二进制形式:10100/10000000=10100 * 2^-7=0.0010100;
  • 定点数:0.0010100000

浮点数:0.10100 * 2^-10    (规格化,指数为二进制格式2)

  • 在定点机中:
    • 原码/补码/反码:0.0010100000,因为是正数,且在定点机中,所以原码、补码、反码都相同。
  • 在浮点机中(数阶码和值用;隔开)
    • 原码:1,0010;0.0010100000
    • 补码:1,1110;0.0010100000
    • 反码:1,1101;0.0010100000  

计算机组成原理(四)_第6张图片

  • 二进制表示:-111010
  • 定点表示:-0000111010;
  • 浮点数表示:-(0.1110100000)* 2^110;
  • 定点机中:
    • 原码:1,0000111010;
    • 补码:1,1111000110;
    • 反码:1,1111000101
  • 浮点机中
    • 原码:0,0110;1.1110100000
    • 补码:0,0110;1.0001100000
    • 反码:0,0110;1.0001011111
    • 阶码移码表示,尾数补码表示:1,0110;0.1110100000

计算机组成原理(四)_第7张图片

(四)IEEE754标准

计算机组成原理(四)_第8张图片

  • 该标准下,尾数要求规格化表示,又因为规格化符号位后面是1,所以可以省去不写,在云算时加上。
  • 下面是不同规格的存储形式:

计算机组成原理(四)_第9张图片

十六、数的计算

(一)移位运算

A、为什么要有移位运算?

  • 因为在计算机中记录数据的位数有限,通过移位可以实现将数据扩大或缩小
  • 因为小数点位置没有硬件来表示,所以小数点位置是固定不变的,移动的是数据位
  • 在计算机中移位和加减的配合,能够实现乘除;

B、算数移位的规则

要保持符号位不变,不参与移位(定点机)

码制 添补代码
正数 原码、补码、反码一样 添加0
负数 原码 添加0
补码 左移添加0
右移添加1
反码 添加1
  • 这里的反码加1,因为例如1,1011,其反码为0,0100,所以原码的0是反码的1,故反码左右移动时应该补空位为1
  • 补码是左移补0时因为0补到最后位,相当于原码添加0。右移添加1,是因为除末位加1得到补码,首位仅取反,故添加1,相当于原码添加0

C、举例

计算机组成原理(四)_第10张图片

二进制表示:-26=11010

其原码对应移动后如下表:

移位操作 数据表示 真值
移动前 1,0011010 -26
向左移动1位 1,0110100 -52
向左移动2位 1,1101000 -104
向右移动1位 1,0001101 -13
向右移动2位 1,0000110 -6
  • 这里我们发现正常移位,都等于原值  * 2^n,例如向左移1位-52 = -26 * 2^1 =-52;当向右移动两位后,因为被截掉的位为1,所以造成精度出错结果为-6.

补码表示:

移动操作 数据表示 对应真值
移动前 1,1100110 -26
左移一位 1,1001100 -52
左移两位 1,0011000 -104
右移一位 1,1110011 -13
右移两位 1,1111001 -6
  • 因为右移两位,移走了一个1,所以精度错误,丢了1,故为-6;

反码表示:

移动操作 数据表示 对应真值
移动前 1,1100101 -26
左移一位 1,1001011 -52
左移二位 1,0010111 -104
右移一位 1,1110010 -13
右移二位 1,1111001 -6
  • 右移两位时移走了一个0,因为是反码,实际是移走一个1,故结果为-6,不是-13的一半。

D、硬件实现移位

计算机组成原理(四)_第11张图片

  • 如上我们左移过程中如果丢掉了真值的1,则数据会出错;如果右移丢掉了真值的1,则会影响精度;如上面-26 = 1,0011010,左移三位,丢掉一个1,为1,1010000 = -80 > -104(左移两位的值),显然不满足左移数据绝对值增大的原理,所以出错!

E、逻辑移位与算数移位的区别

逻辑移位:全部位都参与移位;

算数移位:首位的符号位不参与移位;

  • 例子:如给二进制数:011010;
    • 逻辑左移1位,110100;
    • 算数左移1位,0,10100;(因为0是符号位,所以一个1丢了,报错!)
    • 逻辑右移1位,001101
    • 算数右移1位,0,01101

(二)加减运算

A、加减法运算公式

计算机组成原理(四)_第12张图片

  • 符号位也参与运算,符号位进位自动丢掉,即可得出正确结果。
  • 例子:

计算机组成原理(四)_第13张图片

B、机器字位数不够,导致计算溢出

  • 情况一:机器字长还是8(含符号位),浮点机

先运算9+11运算最后的结果为:2^ 4 * 1.0100000,发现尾数大于1,溢出

C、如何判断溢出

当两个正负不同的数相加时,不可能产生溢出

一位符号位:当两个符号相同的数相加时,若符号位的进位与最高数值位的进位不同时,则发生溢出,如符号位都是1,最高位也都是1,符号位进位1,最高数值位进位1,则无溢出。

两位符号位:若结果的符号位相异则溢出(例如10或01);

  • 运算器大概结构

计算机组成原理(四)_第14张图片

  • Ga和Gs是表示器,当Ga为1时为加法操作,当Gs为1时是减法操作,求补控制逻辑生效。
  • 求补控制逻辑,减数连通符号位一起取反,存入X寄存器。
  • X寄存器通过加法器完成加1操作,将结果存入ACC中,放入存储器
  • 将求补后的减数拿出 和 ACC中的被减数做加法操作,得出结果。

(三)乘法运算

A、分析笔算乘法

  • 部分积(位积)指乘数的其中一位和被乘数相乘得到的结果
  • 观察发现,当乘数位为1时,其位积为被乘数,当为0时,其位积为0
  • 乘积位数扩大一倍,我们可以用两个寄存器实现。
  • 我们可以通过判断乘数各位的值,来得出不同位的位积,每后一个位积与前一个位积相错一位相加,得到结果即为乘积(这样就将乘法变成了加法+加移位实现)
  • 位积错位可以是前一个位积右移,也可以是后一个位积左移

B、用数值推出位积公式(将乘法转化成位移的过程)

计算机组成原理(四)_第15张图片

  • 每个2^(-1)代表将位积向右移动1位,最后的公式显示了位积错位相加得到乘积的过程。

C、将位积错位相加得到乘积的过程细化

计算机组成原理(四)_第16张图片

  • 第一行我们乘数寄存器中都为乘数各位,判断最后位为1,则位积为0.1101,相加为0.1101;
  • 第二行开始前,将乘数向右移动丢掉计算完毕的位,空出左边位置将上一步和向右移动移位补充,部分积剩余0.0110
  • 下面重复该步骤。
  • 注意:上面的移位过程是逻辑移位,小数点前面的值不是符号位(符号位单独运算)。

D、小结

  • 乘法运算可以使用加和移位进行实现(n为数据位数,加n次,移n次)
  • 乘数的每位的值决定被乘数是否与原位积相加。位为1,则位积为被乘数,位为0,则位积为0.
  • 算逻单元要实现乘运算,需要3个寄存器(MQ、ACC、X),其中两个要具有移位功能。1个全加器(用来实现被乘数与ACC中位积的高位相加
  • MQ存乘数和位积和的低位,ACC储存位积的高位、X存储被乘数。MQ和ACC具有移位功能。
  • 特点
    • 绝对值运算
    • 根据参与运算的数据位确定移动次数,从而确定乘法是否结束
    • 逻辑移位 

E、硬件结构图

计算机组成原理(四)_第17张图片

  • 移位和加控制根据Q中低位的值(n)来决定移位和控制门的开闭,当Q中低位n为0时,移位和加控制直接进行A和Q中数据的移位操作,控制门处于关闭状态;当Q中低位n为1时,移位和加控制,打开控制门,X中存放的被乘数送入加法器,A中位积累加和的高位也送入加法器,相加,同时位置移动。
  • 计数器记录移位的次数,判断乘法是否完毕!
  • 不能用加的次数判断是因为当Q中低位0时,可以选择直接移位,跳过加法操作
  • 三个寄存器位数都为n+1位

(四)除法运算

A、笔算除法

计算机组成原理(四)_第18张图片

  • 每次商的得出都是根据余数和除数的大小决定的,如果除数大于余数,则商0,余数保持不变,除数向右移位,再次跟余数比大小,如果小于余数则商1,二者相减。
  • 正负号(商符)单独处理。
  • 这里有个约定:(设x为被除数,y为除数,
    1. 如果我们使用小数定点除法,则|x|<|y|,否则溢出;
    2. 如果使用整数定点除法,则|x|>|y|,否则溢出;
    3. 被除数不等于0,如果等于零,不用处理直接返回0
    4. 除数不能为0,如果为0则会系统出错。

B、移动余数和移动除数的区别

  • 在除法过程中,手算是除数移位,余数补零(也可以看作余数左移一位,除数补零)
  • 占用字节数不同
    • 除数移位,需要2倍字长加法器,上商位置不固定;
    • 余数移位,低位补零,减除数,只需要1倍字长的加法器,商在寄存器最末位上

​​​​​​​C、具体运算过程(恢复余数方式)

  • 减法操作通过补码转换为加法操作,故我们需要y及-y的补码。
  • 商和被除数各占一个寄存器,都具有移位功能。
  • 开始时,用被除数和除数的补码([-y]补)相加,结果为,说明被除数(余数)比除数小则在商寄存器最低位为0。
  • (恢复余数)加上除数的补码,得到原来的余数,这里跟被除数相同,然后整体向左移位,余数变为1.0110,加上除数补码,判断为正,则该结果即为现余数。
  • 再次左移,重复上面步骤,直到商寄存器被占满,则除法完毕

​​​​​​​D、具体运算过程(不恢复余数法)(对恢复余数法的改进)

  • 在恢复余数做法中,我们先用余数减除数得到Ri,如果为小于1,则移位商0,同时恢复余数,Ri + |y| 恢复后我们左移继续减去除数,2(Ri + |y|) - |y|=2Ri + |y|,由上我们知道,完全可以不恢复余数,当需要恢复余数时,将恢复余数和下一步(移位与除数相减)合并即可,即公式2Ri + |y|.
  • 具体实例如下:

​​​​​​​

  • 特点,上商n+1次;第一次判断商溢出;移n次;加n+1次;用移动的次数判断除法运算是否结束。

E、除法结构实现

计算机组成原理(四)_第19张图片

  • A中保存被除数和余数、Q中保存商,用商的最后一位判断加减
  • 计数器记录加法次数,判断除法是否结束。Gd是除法标识符,V是溢出标 识符。

(五)浮点机运算(仅加减运算)

A、浮点机运算三大步骤:对阶、尾数求和、规格化、考虑舍入处理

B、对阶

计算机组成原理(四)_第20张图片

  • 因为数据阶数不一样,所以要先对阶,当阶数相同时,尾数才对齐,可以进行加减操作。
  • 对阶原则:小阶向大阶看齐
    • 大阶看齐小阶,则大阶减少,尾数对应左移,存在数值最高位是1被丢掉的情况,高位丢1,导致结果错误
    • 小阶向大阶看齐,则小阶增加,尾数对应右移,虽然存在最小位丢1的情况,但是损失的只是数据的精度。
      • ​​​​​​​右移舍入的几种方式:1、尾数恒置1  2、当移掉的数含1,对数值位加1;3、不考虑直接截除。

​​​​​​​C、尾数相加、规格化(举例解释)

  • 将x和y都转换为补码,将所有减方法变成加方法。首先计算两个数的阶差(两个数的阶位相减。得到差值为-2,证明x比y阶大,小阶靠齐大阶。
  • 得到x对阶后的补码:00,11;00.0011 
  • 尾数相加,得到x+y的补码:00,11;11.1001(因为是补码,小数点后为1,非规格化)
  • 规格化

  • 我们左规,得到x+y的值;
  • 当尾数相加出现溢出时,就需要右规,阶码增加1.(当符号位出现01或者10时,即为溢出情况,这时两个符号位有一个不是符号位,是溢出的数

D、如何是否被规格化

  • 原码符号位后要为1,补码和反码符号位和数值最高位值不同时为规格化值

E、溢出的推导如下图

计算机组成原理(四)_第21张图片

  • 重点思考上溢和下溢都会为何是01和10 。

​​​​​​​十六、算数逻辑单元

(一)快速进位链(算数逻辑单元的一部分)

A、并行加法器 

计算机组成原理(四)_第22张图片

  • A和B是两个要相加的位的值,C是来自上一位运算结果的进位,S是A和B相加的值。
  • Si的值根据上面公式可见,Ai、Bi的值都是保存在寄存器中的,可以直接取用,所以Si得出速度受限于其上一位进位Ci-1的值。
  • C值的得出分为两种情况:
    • 输入的A、B都为1,则C为1,S为0;
    • 输入A、B相异,则其上一位的进位传入,S为0,该位进位C为1(打开)

B、串行进位链

  • 进位链就是传递仅为需要的线路;串行进位链:进位串行传送

计算机组成原理(四)_第23张图片

  • 与:当两个变量都为1时为1,否则为0
  • 这里想要产生通路,C-1、t0、d0分别为1、1、0(1是高电平),C-1和t0与后为1,再非为0,0和d0与为0,非为1,形成通路。
  • 设电路经过一个与非门的延迟是t,全家器位数为n,那么总共产生的延迟时间:2nt;
  • 可见与非门的速度是限制全加器的性能瓶颈

C、并行进位链

计算机组成原理(四)_第24张图片

  • 通过公式推出最后一位进位和其他进位的关系,同时计算所有位的进位,这样就将时间缩小到了2.5t,但是同时产生的大量进位又会使后面处理进位逻辑的电路变得复杂,故我们需要一种折中方案。

D、单重分组跳跃进位链

  • 我们将要计算的位分成几组,每组内部采用并行进位链,组与组之间使用串行进位链,这样既不会使进位处理电路非常复杂,时间也比纯串行化方式块

  • 第四组产生的最高位进位传入第三组,后第三组同时计算出C4-C7几个进位,C7传入第二组后,第二组开始计算进位
  • 这样我们耗费的时间就是4*2.5t =10t相对于纯串行化方式的2*16*1t=32t方式更快,但也不是更快,还有更好的改进方案。

E、双重分组跳跃进位链

我们将要计算的位分成多个大组,每个大组中包含同样多的小组,小组中有相同的计算位

每个大组中的小组的最高位同时产生大组之间串行化方式进位

这里我们要计算的32位,分为两个大组,每组中有4个小组,小组中有4个位,

计算机组成原理(四)_第25张图片

  • 这样我们第二大组的最高位产生的进位送入第一大组,第一大组同时产生所有小组进位,则时间更快

(二)分析双重分组跳跃进位链

A、开始分析前,一定观察上面最开始并行进位链中d、t、c-1等信号线

  • 观察发现d、t信号都是自己传入的信号,c-1来自上一步进位

B、开始分析,从最小组(第八小组着手,含4位进位)

  1. 上图是对该组最高位进位c3的分析,可以看到D8扩起来的位置都是该组内部线路(t、d)决定的,T8扩起来的部分也是由该小组内部提供,C-1是上一组的进位。故我们可以吧第八小组的C3进位简化为:C3 = D8 + T8C-1
  2. 将C3逐层往下代到第七组、第六组、第五组,我们可以看到他们组最高位C7、C11、C15都与每个小组内的D和T有关,而每个小组的D和T因为不涉及其他小组可以在第一时间周期中计算出来;换言之就是当C-1给到时,我们可以通过二重进位链第二时间周期得到四个小组的最高进位(C15、C11、C7、C3)
  3. 如下图:

​​​​​​​​​​​​​​

  • 如上图,经过2.5s,c-1进入第八小组,产生c2、c1、c0、同时各个小组的T和D都产生,都等待上一位进位的产生
  • 再经过2.5s(5s后)所有小组最高位产生。
  • 7.5s后,各个小组的其他进位开始产生。至此执行完毕!

C、加入大组,更大处着眼

  • 几个注意点:
    • 在第一个2.5s,因为T和D本地线路产生,所以同时两个大组的每个小组的D、T也都产生了(D1~D8)(T1~T8)
    • 第二时间周期中,产生第二大组的四个最高进位,因为第一大组需要的二大组的最高位所以第二大组最高位在该周期没有产生
    • 第三时间周期,第大组中的最高位进位产生,同时第大组各非最高位进位产生
    • 最后一时间周期,用来处理第一大组剩下的个小组中非最高位进位的产生。

​​​​​​​十七、机器指令

(一)机器指令的在计算机系统中所处的地位

指令被软件调用,由硬件来执行从而完成一些固定操作​​​​​​​

(二)指令的一般格式

操作码 + 地址码

A、操作码

  • 反映具体要做什么操作,操作码长度是可变的,分为固定长度可变长度
  • 同时注意,操作码可以不是连续的,可以分散保存。
  • 固定长度多用于指令字长较长的情况,像IBM 370系列 指令字长8位。
  • 长度可变:常用的X86系列处理器就是长度可变的。指令码分散在指令字的不同字段中。

​​​​​​​B、扩展操作码技术

  • 要想实现长度可变,就要用到扩展操作码技术
    • ​​​​​​​两种方式:保留一个编码的码点作为扩展的标志; 利用操作码当中某一位作为扩展的标志​​​​​​​
  • 如何扩展操作码?
    • 我们假设有一共16位的结构,每四位一组,一共四组。

计算机组成原理(四)_第26张图片​​​​​​​                        

  • 此时我们只有四位是操作码,一共能够存15内存大小,保留1111,为扩展标志,如下图:

  • 我们用1111来实现指令部分扩展,地址位相应减少

计算机组成原理(四)_第27张图片

  • 扩展为一地址码

计算机组成原理(四)_第28张图片

  • 同理我们可以全部扩展为指令,没有地址

计算机组成原理(四)_第29张图片

  • 上面的图片为了理解,所以每个标志直接占满四位,真正是在前四个中如果1111被占用,则少一位三地址指令,多了2^4=16个地址指令,如果二地址指令少一位,则多了16个一地址指令,如此类推

C、操作码扩展原则

操作码不能是操作码的前缀,否则很难被机器识别出这两条指令(暂时标记,不懂,后面会解释

(三)机器指令的改进

A、演化过程

  • 四地址的情况

计算机组成原理(四)_第30张图片

  • 这种情况会造成四次对存储的访问,严重拖慢性能。并且寻址范围也太小,根本无法执行该指令
  • 所以我们做出改进,将下一条指令地址放到专门硬件PC

计算机组成原理(四)_第31张图片

  • 这种情况每个地址的长度都增加了,那么寻址范围也同样增加到256位
  • 但还是要有四次访存,我们继续做出改进,让结果储存在A1或A2中与参与操作的数共用一个地址​​​​​​​

计算机组成原理(四)_第32张图片

  • 这样的方式又扩大了地址码的寻址范围,但是还是需要结果还是会保存到存储器中,访问还是4次,我们用ACC这个寄存器来保存操作结果,同时在结果产生前保存一个参与运算的变量这样就只需要两次访存。

计算机组成原理(四)_第33张图片

  • 这样就只需要2次访存,一次取操作码,一次取其中一个变量
  • 当然可以是零地址。​​​​​​​

​​​​​​​B、指令字长​​​​​​​

指令字长取决于:操作码的长度、操作地址的长度、操作地址的个数

指令字长固定时,往往是:指令字长=存储字长

指令字长可变是,往往是按字节倍数变化,如一个指令8字节,那么变化后可能是8n字节,n为正整数。

C、小结

  • 当我们使用一些硬件来代替指令字中的地址码后,会有这些好处:
    • 可扩大指令的寻址范围
    • 可缩短指令字长
    • 可减少访存次数
  • 当指令的地址字段为寄存器时,因为寄存器更快,且寄存器个数有限占用地址码短:
    • 可缩短指令字长
    • 指令执行阶段不访存

(四)操作数的类型、在内存中的存放方式

A、操作数的类型

类型 格式
地址 无符号整数
数字 定点数、浮点数、十进制数
字符 ASCII码
逻辑数 逻辑运算

B、数据在存储字中的存放方式

计算机组成原理(四)_第34张图片

  • 每个横行是一个存储字(存储单元)
  • 两种存储方式:将数据高位放在数据开始地址(高字节地址为字地址),将数据低位作为数据开始地址(低字节地址为字地址)

C、数据在存储器中的存放方式

假设我们存储字长为64位(8个字节),一横行还是表示一个存储单元

  • 方式一:按顺序从空位开始储存,依次存储

计算机组成原理(四)_第35张图片

  • 优点:不浪费存储资源
  • 缺点:除了访问一个字节之外,访问其他任何字节都要至少花费两个存储周期。这样受存储器性能瓶颈影响较大。
  • 方式二:从存储字的起始位置访问和存储(每个字仅保存一次数据)

​​​​​​​​​​​​​​计算机组成原理(四)_第36张图片

  • 优点:任何类型都可以一个周期内完成数据访问,读写控制简单。
  • 缺点:浪费宝贵的存储资源
  • 方式三:边界对准方式(前两者的结合)

计算机组成原理(四)_第37张图片

  • 数据存放的起始地址是数据长度的整数倍这样就避免了一个存储字不仅仅只有一种数据占用导致的空间浪费,又避免了一种类型的操作数同时占用两个存储字导致访问周期过长,拖慢效率

(五)操作类型

A、数据传送指令

计算机组成原理(四)_第38张图片

B、算数逻辑操作

计算机组成原理(四)_第39张图片

C、移位操作

计算机组成原理(四)_第40张图片

D、转移

计算机组成原理(四)_第41张图片

计算机组成原理(四)_第42张图片

  • 当在主程序执行过程中遇到调用指令,会跳转执行子程序,遇到return指令,再返回上一级程序执行。

(六)指令的寻址方式

特、指令中的寻址特征、形式地址与真实地址

  • 寻址特征在指令中占一定位置,用来确定地址的寻址方式
  • 形式地址:指令中的操作数地址不是真正的地址
  • 真实地址:该地址对应的存储单元中就是对应操作数。

A、顺序寻址和跳跃寻址

  • 顺序寻址
    •  PC(指令地址寄存器)不断+1,按顺序执行不同指令。
    • 当执行到特殊指令,如JMP(无条件跳转指令)时,就直接跳转到该指令指定的地址执行指定指令,即所谓跳跃寻址。

​​​​​​​计算机组成原理(四)_第43张图片

B、立即寻址  

计算机组成原理(四)_第44张图片

  • 中间代表寻址特征,这种寻址方式中A不是操作数地址,而就直接是操作数,用补码形式保存。
  • 指令执行阶段不用访问主存,执行速度不受主存限制
  • 操作数大小受A的位数限制,位数越多,可储存操作数就越大。

C、直接寻址

计算机组成原理(四)_第45张图片

  • 有效地址等于形式地址A,A的地址对应主存中的存储单元中就是操作数本身
  • 这里的LDA指令得到操作数后,将其存入寄存器。
  • 执行阶段,访问一次存储器,A的位数决定了该指令操作数的寻址范围。
  • 这种方式操作数地址不易修改,因为要修改必须修改主存中的数据,或修改指令(必须修改A)

D、隐含寻址

计算机组成原理(四)_第46张图片

  • 这种方式,操作数隐含在操作码当中,如上例两数相加的例子,A仅提供了一个加数的主存地址,另一个加数隐含在ADD操作码中,在指令执行前就已经获得。
  • 过程,取出加数后,和操作码中加数传入ALU,运算后放入ACC寄存器。
  • 指令中少了一个操作数地址,可以缩短指令字长。

​​​​​​​​​​​​​​E、间接寻址

  • 这种方式形式地址A提供的地址对应的不是操作数,而是操作数的真实地址,对操作数的获取不是直接获取的。
  • 一次间接寻址:

计算机组成原理(四)_第47张图片

  • 指令执行期间需要两次访问主存:一次获取操作数真实地址,一次获取操作数。
  • 扩大了寻址范围,因为真实地址在存储器中,所以操作数地址范围可以很大。
  • 利于编程,可以通过改变A对应的存储单元真实地址,而改变操作数。
  • 多次间接寻址:

计算机组成原理(四)_第48张图片

  • 这种方式要在内存中辗转多次才能找到真正的操作数。

E、间接寻址可编程特点举例

  • 下面是一段主程序,在主程序的过程中,两次被中断,调用子程序,在子程序跳回主程序断点继续执行主程序保存程序断点两个位置就体现了间接寻址的可编程特点。

计算机组成原理(四)_第49张图片

  • 在该过程中,第一次保存断点时,子程序最后JMP指令 中操作码A对应的存储单元中保存的是81这条指令地址,当子程序执行完毕后,执行JMP跳转到主程序断点继续执行主程序。
  • 而后第二次调用子程序时,修改子程序中A对应的存储单元的真实地址为202,即可保存断点,指令始终没有变,变化的只是对应主存中存储单元的真实地址。

F、寄存器直接寻址

计算机组成原理(四)_第50张图片

  • 此种方式Ri对应的是寄存器编码,操作数直接从Ri对应的寄存器取出,执行阶段,不用访问主存,执行速度快。
  • 寄存器个数有限,Ri比A要短,可以缩短指令字长

G、寄存器间接寻址

计算机组成原理(四)_第51张图片

  • 有效地址(真实地址)在Ri对应的寄存器中,寄存器中真实地址对应的主存中的存储单元是真正的操作数 。
  • 这种方式同样有利于编制循环程序。只需要改变寄存器中真实地址,不用改变指令本身。​​​​​​​

H、基址寻址(专用寄存器作为基址寄存器)

  • 采用专门的寄存器作为基址寄存器,所有A中的地址都要加上基址寄存器中的地址。

计算机组成原理(四)_第52张图片

  • BR和A经过ALU(运算单元)得出的地址对应操作数
  • BR内容由操作系统管理程序确定
  • 在程序执行过程中BR内容不变,仅需要改变A即可变更操作数地址(A更像一个累加器的角色)
  • 有利于扩大寻址范围(改变BR的大小即可改变寻址范围)
  • 有利于多道程序的执行,不同的基值代表不同的程序。

​​​​​​​I、基值寻址(用通用寄存器作基址寄存器)

计算机组成原理(四)_第53张图片

  • 用户决定哪个通用寄存器作为基址寄存器。
  • 基址寄存器内容由操作系统决定
  • 在程序执行过程中,基值不变换,变化的是A中的形式地址。

​​​​​​​J、变址寻址

计算机组成原理(四)_第54张图片

  • 可以扩大寻址范围
  • IX变址寄存器由用户指定。
  • IX内容可变,但是A中的形式地址保持不变
  • 便于处理数组问题。

K、对比直接寻址方式和变址寻址方式所用指令条数的不同

L、相对寻址

计算机组成原理(四)_第55张图片

  • 通过PC地址和A相加来得到下一条指令的地址
  • 利于程序浮动,这种方式因为PC值在每次指令取出的时候,在执行之前就已经变为下一条指令地址,所以计算偏移量A时要考虑这方面因素。
  • 广泛用于转移指令 。

M、堆栈寻址

  • 堆栈特点:
    • 硬堆栈,栈顶由两个或多个寄存器构成,操作的变量从栈顶取出结果保存在栈顶,其他部分依然在存储器中。
    • 软堆栈,栈是在存储器中指定的一块固定的内存单元,这块单元满足先进后出的特点。
  • 栈在内存中,地址越小越靠近栈顶,地址越大越靠近栈低。
  • 下面是进栈和出栈的实例(栈顶始终由寄存器SP给出,这里地址由十二进制表示)

计算机组成原理(四)_第56张图片

  • 当有数据进栈,SP指向地址-1,然后将数据压入栈顶;当有数据出栈,SP地址+1,然后原栈顶数据被移出。 
  • SP的改变多少跟进出栈的数据大小(或者SP的编址方式有关)
    • 例如:我们进出栈的数据每次是1个字,那么就是SP+1或者Sp-1;
    • 如果我们每次进出栈的数据都是两个字节,那么SP就是+1或者-1了。 

(七)指令格式举例

A、指令设计过程中要考虑的因素

  1. 指令系统的兼容性,要求在指令系统更新的时候,要保证依赖于之前版本指令的程序依然能够执行
  2. 要用几个指令,指令的复杂程度,指令的使用频率,指令字长是否固定,指令的扩展方式,指令寻址方式,指令的地址格数,指令的大小,寄存器的个数等等。 

B、IBM360的指令的几种格式

两地址指令,运算结果保存到R1或R2.

R1是地址、X是变址寄存器、B是基址寄存器,D是偏移量,操作数位置:X+B+D确定。

两个地址、操作数位置由B+D确定

计算机组成原理(四)_第57张图片

  • SS格式指令:一般用于将一段储存单元的数据移动到另一段存储单元,B1记录的是原数据块起始地址、L记录数据块大小、B2指定要移入的首地址,D2存取出的数据,用于存入新位置。

 (八)RISC和CISC

A、是什么?

RISC(Reduced Instruction Set Computer),简单指令集计算机

CISC(Complux Instruction Set Computer),复杂指令集计算机

B、机器指令集是否越多越好?

在程序运行过程中,往往80%的语句仅用到了机器指令集当中20%的指令,这些指令大都是简单的指令。(二八规律

指令集过大过于复杂会导致,不常用的复杂指令拖慢常用简单指令的执行效率,所以有RISC的出现,相对就有CISC的出现。

C、RISC的特点

  • 指令集选用频率高的指令组成,复杂指令通过简单指令组合来完成。
  • 指令的长度固定,指令种类少,寻址方式少。
  • 能够访问主存的指令固定,一般指令访问寄存器完成
  • 因上,该类计算机需要很多通用寄存器
  • 为了保证效率,采用流水模式,在一个时钟周期必须完成某些操作。
  • 采用组合逻辑实现控制器,结构相对简单。

D、CISC的特点

  • 系统指令复杂庞大 ,各种指令只用频率不一样,大量指令闲置时间较长
  • 指令长度不固定、指令格式种类多、寻址方式多,CPU对应结构复杂,译码时间较长
  • 访存指令不受限制
  • CPU中设有专用寄存器
  • 因为指令复杂,多数指令需要多个时钟周期来完成
  • 因为一些复杂操作需要微指令来按顺序执行,由微程序来控制,要知道顺序就需要不断访存又拖慢了效率。

E、RISC相对于CISC的优劣

  1. 有利于充分利用CPU(芯片面积),更多空间来做储存。
  2. 能提高计算机的运行速度。
  3. 设计简单,节省成本。
  4. 不利于指令集的兼容,因为指令集设计的间隔很小(?)

​​​​​​​十八、CPU的结构和功能

(一)CPU(运算器 + 控制器)的结构

A、控制器的功能

  1. 取指令
  2. 分析指令
  3. 根据分析出的结果调用不同的硬件执行各种操作
  4. 控制程序的输入和输出
  5. 控制总线(总线管理)
  6. 处理异常和特殊请求
  • 1~2指令控制、3操作控制、4~5时间控制、6中断控制

B、运算器的功能(前面有介绍)

实现逻辑运算和算数运算

C、CPU基本结构框图

计算机组成原理(四)_第58张图片

  • ALU算数操作、寄存器用于存指令、CU控制单元、中断系统用于特殊请求和中断请求 

(二)CPU的寄存器

A、用户可见的寄存器

  • 通用寄存器:用来存放操作数,可作为某种寻址方式所需的专用计算器。
  • 数据寄存器:存放操作数(满足各种数据类型),例如两个寄存器拼接存放一个数据。
  • 地址寄存器:存放地址,其应满足最大地址的存放需求。可用于特殊的寻址方式,如段基值、栈指针等
  • 条件码寄存器:存放条件码,可用于程序分支的依据,如正、负、零、进位、溢出等

B、用户不可见的寄存器

例如:流水段之间的寄存器

C、控制寄存器

  • 一条指令的取需要经过如下寄存器

PC---> MAR(主存地址寄存器)--->M(主存储体)--->MDR(主存数据寄存器)--->IR(指令存放寄存器)

其中MAR、MDR、IR是用户不可见,PC是用户可见(指通过某些指令可以得到这些值)

D、状态寄存器

  • 状态寄存器:存放条件码
  • PSW寄存器:主要存放程序状态字
  • 何为程序状态字?
    • 当程序要发生跳转,需要保存断点时,就将原程序的进行状态保存到PSW中,便于中断(或跳转)程序执行完毕后,恢复断点。

(三)指令周期

A、不同指令指令周期不同

计算机组成原理(四)_第59张图片

  • 只有空指令,不需要操作系统参与,例如NOP指令,这里就只有一个取值周期
  • ADD memory 指令在取指周期取出指令同时取出一个操作数,然后在执行的过程中又访存一次,取出另一个操作数。这中指令,取指周期和执行周期一样长;与其不同,MUL memory在执行周期过程中,就需要多次访问内存,所以执行周期时间要远长于取值周期。

计算机组成原理(四)_第60张图片

  • 间接寻址指令,针对找到真实操作数地址还需要多出的访问次数而言。
  • 有些指令周期中含有中断指令,中断周期就是中断程序的跳转程序断点保存等操作。

B、指令执行周期图如下

计算机组成原理(四)_第61张图片

C、CPU工作周期标志

  • 为什么要有该标志,控制单元要时刻了解该指令执行到什么阶段,以方便调用对应程序故需要有工作周期标志
  • 一般用四个原件保存不同周期,

计算机组成原理(四)_第62张图片

D、指令不同周期在CPU中的具体过程图

指令周期

计算机组成原理(四)_第63张图片

  • PC将要取出指令的地址送入MAR,MAR将地址通过地址总线送入存储器中,CU将读指令通过控制总线发送到存储器存储器收到后通过数据总线,返回给定地址的指令(数据)到MDRMDR再传送到专门保存指令的寄存器IR中。

间址周期:

计算机组成原理(四)_第64张图片

  • MDR将第一次获得的真实地址送入MAR,MAR将地址通过地址总线送入存储器,CU通过控制总线向存储器发出读命令,存储器收到命令后,根据传来的地址,将数据通过数据总线送入MDR,MDR即为真实的操作数了。

执行周期(不同指令执行周期不同,后面详细介绍

中断周期:分为三步骤:保存断点、形成中断程序入口地址、硬件关中断,前两部分为我们重点介绍内容。

计算机组成原理(四)_第65张图片

  • CU将断点(PC的值)要保存的地址传入MAR,MAR通过地址总线传入存储器,CU通过控制总线将写命令传入存储器,PC将断点(下一条要执行的指令地址)传入MAR,MAR通过数据总线送入存储器,存储器根据写命令保存到指定地址。
  • 而后,CU给出中断入口地址,送入PC,中断程序开始执行。

(四)指令流水

A、硬件方式提高机器运行速度

计算机组成原理(四)_第66张图片

  • 除了硬件方式,我们还可以通过改变计算机系统的结构,提高并行性来提高机器速度

B、 并行性(指令流水)

  • 并行的概念(并发:两个或两个以上的事件在同一时间段发生。同时:两个或两个以上时间在同一时刻发生)
  • 串行化执行指令(假设指令仅有取指令和执行指令两个阶段)

  

两个部件 取指令部件、执行指令部件,因为是串行化方式,当指令1在取出时,取指令部件工作,执行指令部件闲置。

  • 指令流水方式

​​​​​​​​​​​​​​计算机组成原理(四)_第67张图片

在上一条指令执行过程中,就开始取下一条指令。时间若完全重叠,就将指令周期减半,速度提高了一倍。

  • 影响指令流水效率的因素
  1. 因为指令执行阶段时间一般要大于取指令部件,所以在指令执行完毕前,后一条取好的指令就不能得到执行,我们将该指令放入指令缓冲区,以解决取指令部件空闲问题。
  2. 像条件跳转指令,其下一条指令地址要根据上一条指令执行结果确定,那么取指令部件就必须等待。我们通过分支猜测的方法来解决。

计算机组成原理(四)_第68张图片

(五)影响指令流水性能的因素

A、结构相关

计算机组成原理(四)_第69张图片

  • 因为不同指令并行执行,就会产生多个指令争用一个功能部件的情况。
    • 指令1的获取操作数阶段(FO)和指令4的获取指令阶段(FI)都需要访问存储单元
  • 不仅存储部件会如此,其他部件亦会产生该情况。
  •  可能的解决方法如下:
    1. 停顿(添加气泡),就是当产生冲突时,一个指令等待一个周期后执行。
    2. 指令存储器和数据存储器分开(将部件细化)
    3. 指令预存取技术,指令预先存储到指令缓冲部件,等待指令执行。

B、数据相关

  • 因为不同指令可以重复操作,就有可能改变操作数的读写顺序,导致程序错误。
  • 三种情况
    • 写后读(RAW):下一个指令操作数依靠上一指令写入,例如:SUB求和指令,根据R2和R3求出R1,下一条指令根据R1和R5得出R4.
    • 读后写(WAR):下一条指令读的数据来自,上一条指令,同时将结果覆盖上一条指令得出的结果。
    • 写后写相关(WAW):下一条指令,都会对同一存储单元写,如果先后顺序错误也会错误。
  • 解决方法:后推法或者采用旁路技术(计算机体系结构内容

C、控制相关

计算机组成原理(四)_第70张图片

  • 如上图,当第三条指令是跳转指令时,在解释指令阶段(DI),指令5进入取指令阶段,直到指令3运行所有阶段完毕,指令4、5、6、7就都已经执行。而正常程序应该下一步执行指令15,故指令4、5、6已运行阶段全部作废

(六)流水线的性能

A、吞吐率:

  • 单位时间内,流水线所完成的指令(或输出结果)的数量。
    • 设流水线有m段,每段用时t,那么可以得出如下公式:

计算机组成原理(四)_第71张图片

计算机组成原理(四)_第72张图片

  • m*t是第一条指令从流入到流出的时间,后面每过t都会有一个指令流出,故有如上公式。

B、加速比(Sp)

  • 使用流水线的速度和不使用流水线的速度之比;
  • 根据上面的假设我们可以得出加速比:

计算机组成原理(四)_第73张图片

  • 当然也可以用两种情况下,执行相同指令所用时间的比值来得出加速比。

C、效率

  • 由于在流水线执行过程中,进入流水前有准备阶段,还有防止指令阶段冲突而产生的气泡阶段,所以流水也存在空闲的时间段,利用时间段/总用时为效率

​​​​​​​​​​​​​​计算机组成原理(四)_第74张图片

  • 效率=被流水线占用区域/总矩形区域

(七)流水线的并发技术

A、超标量技术

计算机组成原理(四)_第75张图片

  • 有多条流水同时工作,在一个时钟周期内可以执行多条命令,这需要配置多个功能部件以支持多条流水线的同时工作。
  • 不能调整指令的执行顺序,通过编译优化技术,把可执行的指令搭配起来,放在一个时钟周期下并行执行。

B、超流水线技术

计算机组成原理(四)_第76张图片

  • 正常流水线,一个流水段仅执行一个指令的一个周期,流水段之间通过锁存器来传递下一个流水段执行信号或所需数据
  • 与正常流水线不同,每个流水段分成三份,可以让三个指令都用到同一部件,增加部件利用率,三者信号不冲突,同时取消了锁存器
  • 一个时钟周期,同一部件被使用三次,不能调整指令执行顺序,靠编译优化。
  • 流水线速度是原来的倍。

​​​​​​​C、超长指令字技术

  • 由编译程序解释分析要执行的指令集,将具有潜在并行性的一批指令取出,组合成一由多个操作码构成,和多个地址码构成的长指令(100余字节)
  • 这样一次就可以取出多个操作码,在指令执行阶段,由多个设备同时执行不同的指令。

​​​​​​​​​​​​​​计算机组成原理(四)_第77张图片

D、流水线结构

  • 指令流水线结构

计算机组成原理(四)_第78张图片

锁存器用来储存上一个流水段处理的结果和下一个流水段需要的数据

  • 运算流水线​​​​​​​

​​​​​​​​​​​​​​计算机组成原理(四)_第79张图片

(八)中断系统

A、引起中断的因素

  1. 人为引起的中断,如转管指令
  2. 程序性事故,如溢出、操作码不能识别、除法非法
  3. 硬件故障
  4. I/O设备请求的中断
  5. 外部事件,例如用键盘中断,运行其他程序。

B、各中断源如何向CPU提出中断请求?

  • 每个中断源对应一个中断请求标记触发器,多个请求(INTR)组成一个中断请求标记寄存器。

计算机组成原理(四)_第80张图片

  • INTR可以分布在每个中断源的接口电路中,也可以集中分布在CPU的中断系统中。

C、排队器(中断源确定的硬件实现)

  • 如果是分散在各个接口中,就使用链式排队器实现,该响应哪一中断的确定。
  • 如果集中在CPU内部,则如下图电路:

计算机组成原理(四)_第81张图片

  • 越左边的优先级越高,多个中断源同时发出请求,优先级最高的会通过自身的蓝色线路,让其右边的中断请求最后输出的是低电平0,只有自己是高电平1(被选中)
    • 当INTR2、INTR3、INTR4同时发出中断请求(三条线路都为高电平),INTR2优先级最高,左边INTR1低电平0经与非门后为高电平输入INTR2的与非门和INTR2一起经与非门变为低电平,通过蓝线将低电平传到右边,右边所有经与非门后都为高电平,最后经非门后,INTP3、4都为低电平;回观INTP2,低电平经非门后却是高电平。

D、中断入口地址的确定

计算机组成原理(四)_第82张图片

  • 排队器输出的结果(线路中只有一个高电平,即被选中),经过向量地址形成部件后就会形成被选中中断源对应的中断程序的入口地址送入PC中,用于跳转执行。。
    • 入口地址有两种方式,对应单元可以是一个跳转指令,跳转到程序入口,也可以直接是程序入口地址。

E、软件查询法(中断源确定的软件实现)

  • 八个中断源对应的触发器分别是1 2 3...8,数字越小优先级越高。
    • 首先每隔一段时间,都会跳入中断识别程序入口地址,运行中断识别程序,如下图,逐个检查触发器是否有中断请求,如果有就跳转。

计算机组成原理(四)_第83张图片

F、原程序现场的保存(中断隐指令)

  • 中断允许触发器(EINT)= 1时,CPU才会响应中断请求,否则就是有中断程序正在执行,并且新的中断请求没有当前中断请求优先级高,故无法被CPU中断程序响应。
  • 在程序的指令执行周期结束的时候,CPU会查询中断请求信号(下图蓝线),信号和中断源信号一同形成INTR信号

计算机组成原理(四)_第84张图片

  • 程序断点会被送入特定地址(0号地址)内、或者压入
  • 寻找程序入口地址:
    • ​​​​​​​硬件向量,是由向量地址形成部件送入PC。
    • 软件查询法,中断识别程序入口地址M送入PC,从而执行中断查询。
  • ​​​​​​​中断程序跳转后,要完成关中断,将允许中断触发器置0。

​​​​​​​​​​​​​​计算机组成原理(四)_第85张图片

>=1是或门,只有输入电流,高低都有才会输出1(高电平);SR触发器中S断输入低电平、Q段输出高电平电平1,中断触发器(INT)的Q经非门输入到允许中断触发器(EINT)则EINT的Q端输出为低电平0,因为R、S端都为低电平,故EINT为禁用状态

G、保护现场和恢复现场

计算机组成原理(四)_第86张图片

(九)多重中断

计算机组成原理(四)_第87张图片

A、了解屏蔽触发器的作用

  • 屏蔽触发器用来决定中断源是否能够发出中断信号(INTR),下面是屏蔽触发器的两种结构示意图

  • MASK的Q端为低电平0、中断源D发出高电平1、二者经与非门变为高电平1,再经非门变为低电平0,经SR触发器,将INTR置1,中断信号发出。
  • 若MASK为高电平1,则最终INTR为0,中断信号无法发出。
  • 左边是将MASK单独接在中断源,右边是接在排队器上,效果一致。
  • 多个中断源对应的屏蔽触发器组成中断屏蔽字

​​​​​​​B、中断屏蔽字(用来修改INTR发送或处理的优先级)

计算机组成原理(四)_第88张图片

  • 我们虽然无法改变中断源的响应优先级,但是可以控制中断信号的发送优先级
  • 如上图,原屏蔽字就是按照优先级一致设计,当中断源A发出中断信号后,中断屏蔽字全部被置1。其他中断源无法发送中断信号;若B发送中断信号,则屏蔽字变为0111,则只有A能够发出中断信号,进入排队器
  • 我们可以修改不同中断源的屏蔽字,从而达到,控制中断源中断请求优先级的效果。
  • 下图是我们修改中断屏蔽字后,四个中断源同时发出请求,中断程序的执行过程图。

​​​​​​​​​​​​​​计算机组成原理(四)_第89张图片

  • A发出中断请求,修改中断屏蔽器全部置1,其他中断请求无法发出,待A中断程序执行完毕,B请求信号进入修改中断屏蔽字为0100(此为最低优先级的屏蔽字),在B的中断程序执行过程中,C中断请求进入,并修改屏蔽字,C中断程序运行,这时D同样请求进入,修改屏蔽字,执行D程序,D程序执行完毕,返回C程序,C程序执行完毕,返回B程序断点,最后B程序执行完毕,四个中断源全部处理完毕!
  • 下图是设置屏蔽字在流程中的位置:

C、多重中断如何保存多个断点

计算机组成原理(四)_第90张图片

如上图,第一个程序断点保存在零地址,在向量提供的中断程序首地址中,用一条跳转指令(JMP)跳转到SERVE地址,其指令保存原程序在寄存器中数据(保护现场),然后为了防止再来的程序断点覆盖零地址,使用LDA 0将0地址内容提到寄存器中,然后用STA指令存入 RETURN单元 ,最后ENI结束,当中断程序执行完毕就恢复现场

你可能感兴趣的:(1024程序员节,计算机外设)