目录
1.无符号整数的减法实现:减数转换为补码,通过加法的形式实现减法的运算
2.无符号整数的溢出判断:①手算 ②机器实现:CF标志位
3.有符号数:补码、原码(浮点数)
1.加法器的原理:两个 n bit的输入,一个n bit的输出
2.ALU:
①看懂ALU图示。CU(控制单元)给ALU一个控制信号,告诉ALU将要进行什么操作(加/减/乘/除)
②两个输入一个输出;形成CF、ZF、OF、SF标志位
③不仅执行sub、add、mul等运算指令需要ALU参与,执行其他指令时,ALU也会参与:
(1)条件转移指令可以根据ALU进行运算时生成的标志位进行判断是否满足条件
(2)每次执行完指令后,PC都会自动+"1",有的计算机中可能会使用ALU完成此操作
(3)jump指令通过ALU对PC进行加减操作,从而实现指令的往前或者往后
3.补码加/减运算器:
4.乘除法原理:无符号数、补码以及它们的运算电路
1.无符号数
2.有符号数 → 补码
3.定点小数和原码仅在浮点数中用到:考察深度浅
4.运算:加减(深),乘除(浅)
5.溢出:加减、乘除
1.加法:从最低位开始,按位相加,并往更高位进位
2.减法:
①被减数不变,减数全部按位取反,取反后加1
快速方法:从右往左找到第一个1,这个1左边的全部位按位取反
减法化成加法的原因是:加法电路易于实现,造价便宜,减法电路实现困难,造价昂贵
②从最低位开始,按位相加,并往更高位进位(同无符号数加法操作)
①加法器的左端输入被加数A(1010),右端输入加数B(1000)
②加法 → Sub = 0,即加减法控制信号向多路选择输入0,B通过MUX的0侧输入到加法器中
③加法器进行对1010和1000进行逐位相加 → 1 0010 → 只保留低4bit,最高位丢弃
④OF(虽然对无符号数没有意义,但是仍然会生成):1010的最高位(1)和1000的最高位(1)进位(1)和1010的次高位(0)和1000的次高位(0)进位(0)进行异或 → OF = 1
⑤CF(无符号数通过CF是否为1判断是否产生溢出):最高位进位(即cout输出位,1)和sub输入位(加法,0)进行异或 → CF = 1,1010 + 1000发生进位/借位,即溢出
①加法器的左端输入被加数A(1010),右端输入加数B(1000)
②减法 → Sub = 1
1.加减法控制信号向多路选择输入1,B通过MUX的1侧输入到加法器中:B经过非门,即B按位取反 → 0111(实现按位取反)
2.加法器进行对1010和0111进行逐位相加 → 1 0001
3.加减法控制信号通过cin向加法器输入1 → 1 0010(实现末位加1)只保留低4bit,最高位丢弃
③CF(无符号整数的减法中,减数大于被减数,就会发生借位,即结果为负数,而无符号数只能表示整数,故CF = 1时表示无符号减法溢出):最高位输出位(1)和sub输入位(减法,1)进行异或 → CF = 0,1010 - 1000没有借位/进位,即没有溢出
①实现原理和无符号数的加/减原理一样(ALU在实现运算时,并不区分是实现的原码还是补码的运算)
②是否溢出看CF是否为1:最高位进位和SUB异或(OF对补码加/减无意义)
③SF = 1表示负数,SF = 0表示负数
1.OF(无符号数无意义):最高位进位和次高位进位异或
2.SF(无符号数无异议):结果的最高位
3.ZF:结果全0,ZF = 1;结果非全0,ZF = 0
4CF.(有符号数无意义):最高位进位和SUB异或
1.计算机通过当前指令的不同,即进行的微操作不同,对当前进行有符号数/无符号数的计算进行区分,进而让有符号数的加减进行溢出判断时,检查OF;无符号数的加减进行溢出判断时,检查CF
2.加减乘除出现溢出时,并不一定导致异常(内中断):
①硬件:让硬件自动捕捉异常并且发生异常时直接运行中断处理程序
②软件:在执行加减乘除指令后,加上一条陷入指令,由该陷入指令检查溢出是否发生,并且发生时运行中断处理程序
③溢出无所谓,不进行处理
1.2n位保存结果:nbit * nbit 结果一定能用2n bit表示(999 * 999 = 998 001,即3位 * 3位一定不超过6位),故当使用2n bit保存结果时,不会发生溢出
2.n位保存结果:只保留后nbit
(1)无符号数:当前nbit全为0时,舍弃前nbit不影响结果的真值,故不发生溢出;当前nbit只要有出现1时,舍弃前nbit就会影响结果的真值,故发生溢出;当发生溢出时,PSW的OF同样会被置为1
(2)有符号数:当前n+1bit全为0/1,舍弃前nbit不影响结果的真值,故不发生溢出,当前nbit不是全为0/1,舍弃前nbit就会影响结果的真值,故发生溢出
原因是补码的符号扩展:当n位补码最高位为0时,扩展为2nbit,则扩展的nbit为全0;当n位bit最高位为1时,扩展为2nbit,则扩展的nbit全为1;故前n+1bit全0/全1时,舍弃前nbit不影响真值
1.浮点数的表示隐含了一个最高位的1,即计算精度位数时,需要尾数位数 + 1
2.被转换数有效位数 > 转换类型的精度:发生精度丢失
INT类型有1位是符号位,故精度为32 - 1 = 31bit
INT类型精度为31bit,float类型精度为23 + 1 = 24bit → 31 > 24 →可能发生丢失
INT类型精度为31bit,double类型精度为52 + 1 = 53bit → 31 < 53 → 不会发生丢失
(1)可以通过软件的方式使用n轮循环加法指令、减法指令、移位指令等价实现乘法操作
(2)控制逻辑控制循环的次数,并且发出右移和加法指令
(3)a即用软件方式实现(2n轮),b即用硬件方式实现(n轮),c即(1轮)