408计算机组成原理学习笔记——运算方法和运算电路

目录

1.电路的基本原理、加法器设计

1.1算数逻辑单元(ALU)的功能

1.2.ALU的结构(抽象)

1.3.ALU的结构(实例)

1.4.ALU逻辑运算

1.5.实现异或门

1.6.实现偶校验

1.7.一位全加器

1.8.串行加法器

1.9.并行加法器

2.并行进位加法器

3.补码加减运算器

3.1.加法器原理

3.2.补码加/减运算方法

3.3.补码加减运算器电路图

4.标志位的生成

5.定点数的移位运算

5.1.算术移位

5.2. 逻辑移位(补0)

5.3.循环移位

6.原码的乘法运算

7.补码的乘法运算

8.原码的除法运算

9.定点补码除法运算

10.C语言类型转换

11.数据的存储和排列

12.无符号整数乘法的基本电路结构

13.有符号数乘法的基本电路结构

14.除法电路的基本电路


1.电路的基本原理、加法器设计

1.1算数逻辑单元(ALU)的功能

①算数运算:加减乘除

②逻辑运算:与或非

③辅助功能:移位、求补

1.2.ALU的结构(抽象)

①A和B为输入信号:若进行加法操作,加数从A输入,被加数从B输入,输入的是电信号(高低电平)

②F为输出信号:输出A和B相加的结果

③K为控制信号:控制信号由CU发出

1.3.ALU的结构(实例)

①右侧S0 - S3和M:来自CU控制单元的控制信号。CU分析指令的操作是什么(加减乘除/逻辑运算),CU根据其分析结果发出控制信号(电信号,由二进制组成,例:01011,每个信号由高低电平组成)。

M表示的是该操作是逻辑运算还是算数运算:M = 1为逻辑运算,M = 0为算数运算

S0 - S3表示的是将要进行哪一种逻辑运算或者算术运算:有4个bit,可以表示16种不同的运算

②A0 - A3 和 B0 - B3:表示两个4bit的数据,分别从A0 - A3和B0 - B3输入

③F0 - F3:经过ALU运算后,得到4bit的数据,通过F0 - F3输出

④机器字长:ALU能够支持同时输入多少bit的信息

ALU计算完成后会放入某个寄存器,因此ALU为多少位,寄存器就为多少位

1.4.ALU逻辑运算

设高电平为5V,低电平为1V

1.与门:只有AB都输入高电平(5V),Y才输出高电平(5V);否则输出低电平(1V )

2.或门:只要AB一个输入高电平,Y就输出高电平(5V);否则输出低电平(1V)(电路里是判断输入信号是否大于等于1)

3.非门:A输入高电平,Y输出低电平;A输入低电平,Y输出高电平(电路的右边会有个小圈)

4.与的优先级高于或

1.5.实现异或门

1.6.实现偶校验

1.7.一位全加器

1.S值:当前位A、B 和C中有奇数个1,则S为1;有偶数个1,则S为0(异或实现)

2.发生进位:A和B中有两个1,则发生进位;A和B中有1个1,且C为1,则发生进位

1.8.串行加法器

1.一位一位加

2.每次的产生的进位保存到进位触发器中,作为下次加法的进位

3.只有一个全加器,数据逐位串行送入加法器运算

4.操作数n位,则进行n次加法(一次计算和输出一位)

1.9.并行加法器

1.将n个全加器串联起来

2.第 i 个全加器输出的进位会作为第 i + 1个全加器的进位输入

3.从低位到高位按顺序进行,只有前面的所有低位全加器运算完成后,才能进行该位的计算(需要得到上一位的进位,多米诺骨牌),因此被称为串行进位的并行累加器

2.并行进位加法器

串行进位的并行加法器是逐级传递C,但第 i 个加法器输出的C可以通过电路的方式直接送到第 n - (i + 1)个加法器,如此就可以在输出C的时候直接越级传给后面的加法器,而不需要一级一级传递

3.补码加减运算器

3.1.加法器原理

设AB为4bit

cin输入的进位:和AB的第1位(最低位)相加,生成结果的最低位

cout输出的进位:AB的第4位(最高位)和第三位的进位相加生成的进位,后输出到下一个加法器

3.2.补码加/减运算方法

3.3.补码加减运算器电路图

1.若进行的是X + Y,则X直接输入,Y经过多路选择器的0输入,sub的输入为0→cin为0

2.若进行的是X - Y,则X直接输入,Y经过多路选择器的1输入,此时,Y的数据需要经过非门(按位取反)sub的输入为1(末位+1)→cin为1

3.此电路也可以适用于无符号整数,但判断溢出的方式不同

4.标志位的生成

加法器在输出时,还会输出OF、SF、ZF和CF:设有n个bit

1.OF、SF仅对有符号数有意义,CF仅对无符号数有意义,ZF都有意义

2.有符号数溢出:OF = 1;无符号数溢出:CF = 1(发生借位/进位)

OF(Overflow)溢出:最高位(n + 1位)的进位和次高位(第n 位)的进位进行异或

SF(Sign)符号:输出结果的最高位(第n位) ,用途:判断正负

ZF(Zero)零:结果为0,则为1;结果非0,则为0

CF(Carry)进位/借位:最高位(n + 1位)的进位和sub(1为减法,0为加法)进行异或

5.定点数的移位运算

5.1.算术移位

1.算术移位可以等价实现乘法(左移)和除法(右移)

2.原码的算术移位:

①符号位保持不变,仅对数值位进行移位

②右移1位:高位补0,低位舍弃。若舍弃0,则等价于除以2;若舍弃1,则丢失精度

③左移1位:低位补0,高位丢弃。若丢弃0,则等价于乘以2;若舍弃1,则严重误差

3.反码的算术移位:

①若为正数:因为反码正数和原码相同,因此,算术移位操作相同

②若为负数(补0改为补1):

A.右移:高位补1,低位舍弃

B.左移:低位补1,高位舍弃

4.补码的算术移位:

①若为正数:因为反码正数和原码相同,因此,算术移位操作相同

②若为负数:从左往右数,第一个1的左边和反码相同,第一个1的和其右边和原码相同

A.右移:高位补1,低位舍弃(同反码)

B.左移:低位补0,高位舍弃(同原码)

5.小结:

5.2. 逻辑移位(补0)

1.逻辑移位将操作数视为无符号数

2.逻辑左移,高位丢弃,低位补0;逻辑右移,低位丢弃,高位补0

5.3.循环移位

6.原码的乘法运算

1.原理:符号位使用异或单独处理(不参与运算),数值位取绝对值进行乘法运算

2.操作过程:

①取乘数和被乘数符号位进行异或

②加法:若当前位为1,ACC加上被乘数;若当前位为0,ACC加0(通过ALU加法电路完成)

逻辑右移:ALU的最低位成为MQ的最高位,MQ的最低位直接丢弃(错位)

③若n bit的乘法,则进行n - 1轮的加法和移位(重复n - 1轮②③),最终得到结果的绝对值

替换符号位为①中异或的结果

3.初始化:通用寄存器X存放被乘数,MQ存放乘数,ACC归零

取符号位进行异或得到结果的符号位为1

①当前位为1,ACC加被乘数:(ACC)+(X)→ACC。00000 + 01101 = 01101

②进行错位:逻辑右移1位(高位补0),ACC的最低位移到MQ的最高位,MQ最低位丢弃

③当前位为1,ACC加被乘数:(ACC)+(X)→ACC。00110 + 01101 = 10011

④进行错位:逻辑右移1位(高位补0),ACC的最低位移到MQ的最高位,MQ最低位丢弃

⑤当前位为0,ACC加0:(ACC)+(X)→ACC。01001 + 00000 = 01001

⑥进行错位:逻辑右移1位(高位补0),ACC的最低位移到MQ的最高位,MQ最低位丢弃

⑦当前位为1,ACC加被乘数:(ACC)+(X)→ACC。00100 + 01101 = 10001

⑧进行错位:逻辑右移1位(高位补0),ACC的最低位移到MQ的最高位,MQ最低位丢弃

⑨数值为为4,需要进行4次加法和移位,现在进行完毕,也就完成了乘法运算;定点小数的小数点隐含在符号位后,因此,乘法的绝对值的结果为0.1000 1111,替换异或得到的符号位,得到最后的结果1.1000 1111

7.补码的乘法运算

1.进行n轮加法、移位(补码的算术右移),最后再多来一次加法

2.加法的可能值为+0、x的补码、-x的补码(根据MQ的最低位和辅助位确定)

①辅助位 - MQ最低位 = 1:(ACC)+(x的补码)

②辅助位 - MQ最低位 = 0:(ACC)+ 0

③辅助位 - MQ最低位 = -1:(ACC)+(-x的补码)

3.符号位参与运算

4.初始状态:

①ACC置为0,使用双符号位(与原码乘法相同)

②MQ存放乘数,补码的乘法实现中,MQ需要添加一位辅助位(存放在最低位),辅助位初始为0,辅助位加上符号位,因此,设数值位为n位,则实际上MQ需要有n + 2位,并且,ACC和ALU也需要有n + 2位(MQ添加在低位,而ACC和ALU添加在高位)(原码乘法中MQ为n + 1位,仅有符号位,没有辅助位)

③寄存器X存放被乘数,使用双符号位补码形式(原码中被乘数也存放在X)

5.手算:

最后一次加法:使得符号位参与运算

8.原码的除法运算

1.符号位不参与运算,单独使用异或得到结果后替换(同原码的乘法思想),数值位取绝对值

2.数值位取绝对值运算

3.计算机在计算的时候,默认当前位的商为1,然后判断ACC和X的大小,若X更大,则恢复余数

4.初始:ACC存放被除数,X存放除数,MQ置为0(存放商),其最后一位为当前将要确定的商

①MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更小,应该商0

②MQ修改当前位为0,(ACC)+ (|Y|)补→ACC,恢复余数

③逻辑左移(错位)

④MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更大,应该商1

⑤逻辑左移

⑥MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更大,应该商1

⑦逻辑左移 

⑧MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更小,应该商0

⑨MQ修改当前位为0,(ACC)+ (|Y|)补→ACC,恢复余数

 ⑩逻辑左移

11. MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更大,应该商1

12.若最后MQ商的结果为负,则也需要恢复余数并商0

13.替换符号

5.小结

6.不恢复余数法:当余数为负时商0,先左移 ,再+除数(直接进行到下一位商的判断)

9.定点补码除法运算

10.C语言类型转换

1.C语言的整数用补码表示

2.无符号数和有符号数的相互转换不会改变数值的存储,但是会改变解释方式(符号位)

3.长整数变短整数:高位截断,保留低位

4.短整数变长整数:符号扩展

11.数据的存储和排列

1.大小端存储:

①大端方式:最高有效字节存在低地址,最低有效字节存在高地址(利于人类阅读)

②小段方式:最低有效字节存在低地址,最高有效字节存在高地址(方便机器处理)

2.按字节、半字、字寻址:设字长位32bit,半字为16bit

①按字节寻址:一个字节对应一个地址

②按半字寻址:一个半字对应两个字节,因此,每个半字对应两个地址。设寻找半字地址为3,则二进制为11,左移一位(一个半字对应两个字节),因此,首字节地址为110,即6

③按字寻址:一个字对应四个字节,因此,一个字对应四个地址。设寻找字地址为2,则二进制为10,左移两位(一个字对应四个字节),因此,首字节地址为1000,即8

3.边界对齐:每次访存只能读/写一个字

12.无符号整数乘法的基本电路结构

 

1.被乘数存放在被乘数寄存器X中,乘数存放在乘数寄存器Y中

2.乘积寄存器位P数和被乘数寄存器X、乘数寄存器Y相同,逻辑上乘积寄存器P、乘数寄存器Y和进位C是连在一起使用的(即逻辑右移时,原来的C作为现乘积寄存器的最高位,原乘积寄存器的最低位作为现乘数寄存器的最高位,原乘数寄存器的最低位舍弃)

3.ALU主要实现加法运算,C是两个数相加可能产生的进位:若当前乘数寄存器的最低位为0,则ALU左边输入乘积寄存器,右边输入0,计算结果输出到乘积寄存器中;若当前乘数寄存器的最低位为1,则ALU左边输入乘积寄存器,右边输入被乘数寄存器,计算结果输入到乘积寄存器中

4.ALU计算完成并输出数据后,进行逻辑右移

5.控制逻辑发出加、右移和写使能控制信号;设乘数和被乘数位n位,则计数器从n开始计数,进行n轮加法、右移,每进行一轮加法和右移后,计数器 - 1

6.两个n位数相乘,结果用2n位暂存,结果最终保留的是乘数寄存器中n bit,乘积寄存器舍弃。若乘积寄存器全0,则不发生溢出;只要有1,则发生溢出

7.初始状态:被乘数寄存器X存放被乘数1101,乘数寄存器Y存放乘数0111,乘积寄存器置为0,计数器 = 4

①第一轮加法:

A.控制逻辑检测乘数寄存器中当前最后一位为1,则乘积寄存器需要加上被乘数

B.控制逻辑发出发出加信号,乘积寄存器输入到ALU的左边,被乘数寄存器输入到ALU的右边,即进行0000 + 1101 = 1101,计算不产生进位,C为0

C.ALU计算完成后,ALU发出写使能信号,使得计算结果写入乘积寄存器中

第一轮右移:逻辑右移

A.进位C、乘积寄存器、乘数寄存器逻辑上是相连的

B.进行逻辑右移,右移后,则原来的C作为现乘积寄存器的最高位,原乘积寄存器的最低位作为现乘数寄存器的最高位,原乘数寄存器的最低位舍弃

此时,第一轮的加法和移位进行完毕,计数器 - 1 = 3

②第二轮加法:

A.控制逻辑检测乘数寄存器中当前最后一位为1,则乘积寄存器需要加上被乘数

B.控制逻辑发出发出加信号,乘积寄存器输入到ALU的左边,被乘数寄存器输入到ALU的右边,即进行0110 + 1101 = 1 0011,计算产生进位,C为1

C.ALU计算完成后,ALU发出写使能信号,使得计算结果写入乘积寄存器中

第二轮右移:逻辑右移

此时,第二轮的加法和移位进行完毕,计数器 - 1 = 2

③第三轮加法:

A.控制逻辑检测乘数寄存器中当前最后一位为1,则乘积寄存器需要加上被乘数

B.控制逻辑发出发出加信号,乘积寄存器输入到ALU的左边,被乘数寄存器输入到ALU的右边,即进行1001 + 1101 = 1 0110,计算产生进位,C为1

C.ALU计算完成后,ALU发出写使能信号,使得计算结果写入乘积寄存器中

第三轮右移:

此时,第三轮的加法和移位进行完毕,计数器 - 1 = 1

④第四轮加法:

A.控制逻辑检测乘数寄存器中当前最后一位为0,则乘积寄存器需要加上0

B.控制逻辑发出发出加信号,乘积寄存器输入到ALU的左边,0000输入到ALU的右边,即进行1011 + 0000 = 1011,计算不产生进位,C为0

C.ALU计算完成后,ALU发出写使能信号,使得计算结果写入乘积寄存器中

第四轮右移:

此时,第三轮的加法和移位进行完毕,计数器 - 1 = 0

⑤此时,乘法计算结束,4bit * 4bit = 8bit存储,得到最终结果0101 1011 = 91,若只保留乘数寄存器的n bit,则结果位11,发生溢出

13.有符号数乘法的基本电路结构

1.被乘数存放在被乘数寄存器X中,乘数存放在乘数寄存器Y中

2.乘积寄存器位P数和被乘数寄存器X、乘数寄存器Y相同,逻辑上乘积寄存器P、乘数寄存器Y和辅助位是连在一起使用的(即算数右移时,原乘积寄存器的最低位作为现乘数寄存器的最高位,原乘数寄存器的最低位作为现辅助位,辅助位舍弃)

3.ALU主要实现加法运算:根据辅助位和乘数寄存器的最低位进行加/减法

A.辅助位 - 乘数寄存器最低位 = 1,乘积寄存器 + X的补码

B.辅助位 - 乘数寄存器最低位 = 0,不做加法

C.辅助位 - 乘数寄存器最低位 = -1,乘积寄存器 + (-X)的补码(逻辑减法,实际加法)

4.ALU计算完成并输出数据后,进行算数右移(用符号位补空位)

5.控制逻辑发出加、右移和写使能控制信号;设乘数和被乘数位n位,则计数器从n开始计数,进行n轮加法、右移,每进行一轮加法和右移后,计数器 - 1

6.两个n位数相乘,结果用2n位暂存,结果最终保留的是乘数寄存器中的n bit,乘积寄存器舍弃。若高n + 1 bit为全0或全1,则不溢出;否则,溢出

7.初始状态:被乘数寄存器X为1101,乘数寄存器为1101,乘积寄存器和辅助位设为0,计数器设置为4,即进行4轮加法和算数右移

①.进行第一轮加法: 

Ⅰ.辅助位 (0)- Y最低位(1)= -1,控制逻辑发出减法信号,则P输入到ALU左边,被乘数寄存器X的补码输入到ALU右边

Ⅱ.ALU计算结果输出到P中

进行第一轮算数右移:用符号位补空位

第一轮加法、右移完成后,计数器 - 1 = 3

②进行第二轮加法:辅助位 (1)- Y最低位(1)= 0,控制逻辑不发出加/减

进行第二轮右移:

 

第二轮加法、右移完成后,计数器 - 1 = 2

③进行第三轮加法:

进行第三轮加法:辅助位 (1)- Y最低位(1)= 0,控制逻辑不发出加/减

进行第三轮右移:

第三轮加法、右移完成后,计数器 - 1 = 1

④进行第四轮加法:

Ⅰ.辅助位 (1)- Y最低位(0)= 1,控制逻辑发出加信号,则P输入到ALU左边,被乘数寄存器X输入到ALU右边

Ⅱ.ALU计算结果输出到P中

进行第四轮右移:

 

第四轮加法、右移完成后,计数器 - 1 = 0

⑤此时,乘法计算结束,4bit * 4bit = 8bit存储(不计算辅助位),得到最终结果1110 1011 = -21,若只保留乘数寄存器内的n bit,则高n + 1位为1110 1,不为全0或者全1,则发生溢出

14.除法电路的基本电路

定点小数除法:

定点整数除法:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值