写在前面:
- 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
一、移位运算
1、概述
(1)移位运算在日常生活中很常见,例如15m可写成1500cm,单就数字而言,1500相当于数15相对于小数点左移了两位,并在小数点前面添了两个0,同样,15也相当于1500相对于小数点右移了两位,并删去了小数点后面的两个0。可见,当某个十进制数相对于小数点左移n位时相当于该数乘以,“右移”n位时相当于该数除以
。
(2)计算机中小数点的位置是事先约定的,因此,二进制表示的机器数在相对于小数点做n位左移或右移时,其实质就是该数乘以或除以。
(3)移位运算称为移位操作,对计算机来说,移位运算有很大的实用价值,例如当某计算机没有乘(除)法运算线路时,可以采用移位和加法相结合,实现乘(除)运算。
(4)计算机中机器数的字长往往是固定的,当机器数左移n位或右移n位时,必然会使其n位低位或n位高位出现空位,那么,对空出的空位应该添补0还是1,这与机器数采用有符号数还是无符号数有关。对有符号数的移位称为算术移位,对无符号数的移位称为逻辑移位。
2、算术移位规则
(1)不同码制机器数算术移位后的空位添补规则:
真值 | 码制 | 添补代码 |
正数 | 原码、反码、补码 | 0 |
负数 | 原码 | 0 |
补码 | 左移添0 | |
右移添1 | ||
反码 | 1 |
①机器数为正时,不论是左移还是右移,添补代码均为0。
②机器数为负时,三种机器数算术移位后符号位均不变。
[1]由于负数的原码数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0即可。
[2]由于负数的反码各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。
[3]分析任意负数的补码可发现,当对其由低位向高位找到第一个“1”时,在此“1”左边的各位均与对应的反码相同,而在此“1”右边的各位(包括此“1”在内)均与对应的原码相同。故负数的补码左移时,因空位出现在低位,则添补的代码与原码相同,即添0;右移时因空位出现在高位,则添补的代码应与反码相同,即添1。
③负数的原码左移时若高位丢1,结果出错;右移时若低位丢1,影响结果精度。负数的补码左移时若高位丢0,结果出错;右移时若低位丢1,影响结果精度。负数的反码左移时若高位丢0,结果出错;右移时若低位丢0,影响结果精度。
(2)举例:对-26移位后的结果如下。
移位操作 | 机器数 | 对应的真值 | |
移位前 | 原码 | 1,0011010 | -26 |
左移一位 | 1,0110100 | -52 | |
左移两位 | 1,1101000 | -104 | |
右移一位 | 1,0001101 | -13 | |
右移两位 | 1,0000110 | -6 | |
移位前 | 补码 | 1,1100110 | -26 |
左移一位 | 1,1001100 | -52 | |
左移两位 | 1,0011000 | -104 | |
右移一位 | 1,1110011 | -13 | |
右移两位 | 1,1111001 | -7 | |
移位前 | 反码 | 1,1100101 | -26 |
左移一位 | 1,1001011 | -52 | |
左移两位 | 1,0010111 | -104 | |
右移一位 | 1,1110010 | -13 | |
右移两位 | 1,1111001 | -6 |
3、算术移位和逻辑移位比较
(1)逻辑移位的规则是:逻辑左移时高位移丢,低位添0;逻辑右移时低位移丟,高位添0。
(2)例如,寄存器内容为01010011,逻辑左移为10100110,算术左移为00100110(最高数位“1”移丢);又如,寄存器内容为10110010,逻辑右移为01011001,若将其视为补码,算术右移为11011001。
二、加法与减法运算
1、补码加减运算的基本公式
(1)补码加法的基本公式:
(2)补码减法的基本公式:
(3)举例:
2、溢出判断
(1)用一位符号位判断溢出:
①对于加法,只有在正数加正数和负数加负数两种情况下才可能出现溢出,符号不同的两个数相加是不会溢出的;对于减法,只有在正数减负数或负数减正数两种情况下才可能出现溢出,符号相同的两个数相减也是不会溢出的。
②以机器字长为4位(含1位符号位)为例,机器字长为4位的补码所对应的真值范围为,运算结果一旦超过这个范围即为溢出。
③由于减法运算在机器中是用加法器实现的,因此不论是作加法还是减法,只要实际参加操作的两个数(减法时即为被减数和“求补”以后的减数)符号相同,结果又与原操作数的符号不同,即为溢出。
(2)用两位符号位判断溢出:
①两位符号位的补码即变形补码,它是以4为模的,其定义为:
②在用变形补码作加法时,两位符号位要连同数值部分一起参加运算,而且高符号位产生的进位自动丢失,便可得到正确结果。
③变形补码判断溢出的原则是:当两位符号位不同时表示溢出,否则无溢出。不论是否发生溢出,高位(第1位)符号位永远代表真正的符号。
3、补码定点加减法所需的硬件配置
(1)下图所示的是实现补码定点加减法的基本硬件配置框图,图中寄存器A、X、加法器的位数相等,其中A存放被加数(或被减数)的补码,X存放加数(或减数)的补码。
(2)为加法标记,
为减法标记。当作减法时,由“求补控制逻辑”将
送至加法器,并使加法器的最末位外来进位加1,以达到对减数求补的目的。
(3)运算结果溢出时,通过溢出判断电路置“1”溢出标记V。
4、补码加减运算控制流程
(1)加(减)法运算前,被加(减)数的补码在A中,加(减)数的补码在X中。
(2)若是加法,直接完成(A)+(X)→A(mod 2或mod )的运算;若是减法,则需对减数求补,再和A寄存器的内容相加,结果送A。
(3)最后完成溢出判断。