组成原理,除法器
- 格式:doc
- 大小:66.81 KB
- 文档页数:5
第二章运算方法和运算器练习一、填空题1. 补码加减法中,(符号位)作为数的一部分参加运算,(符号位产生的进位)要丢掉。
2. 为判断溢出,可采用双符号位补码,此时正数的符号用(00)表示,负数的符号用(11)表示。
3. 采用双符号位的方法进行溢出检测时,若运算结果中两个符号位(不相同),则表明发生了溢出。
若结果的符号位为(01),表示发生正溢出;若为(10),表示发生负溢出。
4. 采用单符号位进行溢出检测时,若加数与被加数符号相同,而运算结果的符号与操作数的符号(不一致),则表示溢出;当加数与被加数符号不同时,相加运算的结果(不会产生溢出)。
5. 利用数据的数值位最高位进位C和符号位进位Cf的状况来判断溢出,则其表达式为over=(C⊕Cf)。
6. 在减法运算中,正数减(负数)可能产生溢出,此时的溢出为(正)溢出;负数减(正数)可能产生溢出,此时的溢出为(负)溢出。
7. 补码一位乘法运算法则通过判断乘数最末位Yi和Yi-1的值决定下步操作,当YiYi-1=(10)时,执行部分积加【-x】补,再右移一位;当YiYi-1=(01)时,执行部分积加【x】补,再右移一位。
8. 浮点加减运算在(阶码运算溢出)情况下会发生溢出。
9. 原码一位乘法中,符号位与数值位(分开运算),运算结果的符号位等于(两操作数符号的异或值)。
10. 一个浮点数,当其补码尾数右移一位时,为使其值不变,阶码应该(加1)。
11. 左规的规则为:尾数(左移一位),阶码(减1)。
12. 右规的规则是:尾数(右移一位),阶码(加1)。
13. 影响进位加法器速度的关键因素是(进位信号的传递问题)。
14. 当运算结果的补码尾数部分不是(11.0×××××或00.1×××××)的形式时,则应进行规格化处理。
当尾数符号位为(01)或(10)时,需要右规。
fpga除法器原理小伙伴,今天咱们来唠唠FPGA除法器的原理,这可超有趣的呢!你知道吗,在FPGA里搞个除法器就像是在一个神奇的数字小世界里做分配游戏。
想象一下,你有一堆小糖果(被除数),要分给几个小朋友(除数),每个小朋友能得到多少糖果呢,这就是除法要干的事儿。
在FPGA里,有几种办法来做这个除法器。
有一种比较简单直接的,叫恢复余数除法。
这就像是你每次分糖果的时候,先试着给每个小朋友一颗,要是发现给多了,就把糖果拿回来(恢复余数),再重新分。
在数字的世界里呢,就是先假设除数能被被除数除,然后做减法,如果减出来的结果是负数,那就说明给多了,要把除数再加回去,然后调整一下商的值。
这个过程就像小朋友分糖果时小心翼翼的试探,特别有趣。
还有一种是不恢复余数除法。
这个就有点像比较大胆的分糖果方式啦。
不管能不能除得动,先减了再说,如果减出来是负数,那就知道多减了,但是不用恢复到原来的数,而是直接调整商的值,然后继续下一轮的计算。
这种方式就像是在分糖果的时候比较有冒险精神,虽然可能一开始分错了,但是很快就能调整过来。
那在FPGA里具体怎么实现这些操作呢?这就用到了寄存器和逻辑电路啦。
寄存器就像是一个个小盒子,用来存放数字,被除数、除数、商还有余数都住在这些小盒子里。
逻辑电路呢,就像是一群小助手,它们负责做减法、判断正负、调整商的值这些工作。
比如说,要做减法的时候,逻辑电路就像一个超级计算器,快速算出结果,然后根据结果是正还是负,来决定下一步该怎么做。
而且哦,FPGA除法器还得考虑精度的问题呢。
就像分糖果的时候,你要精确到每一颗糖果,在数字里也是,有时候我们需要得到很精确的商和余数。
这时候就要看我们给这个除法器设定的规则啦,是要整数的结果呢,还是可以有小数部分的结果。
如果是要小数部分,那就更复杂一点,就像要把糖果分成小碎块一样,得更加小心地计算。
你可能会想,这听起来好复杂呀。
其实呢,就像搭积木一样。
我们把这些小的操作,像减法、判断、调整商,当成一个个小积木块,然后按照除法的规则把它们组合起来,就成了一个除法器啦。
二.不恢复余数法(加减交替法)除法器1.1 设计1.1.1 设计原理对两个正数采用不恢复余数的算法的一般步骤如下。
1)r 1=x-y ,若r 1<0,同时恢复余数:r 1=r 1+y 。
否则,商q 0=1。
说明商大于0。
根据计算机中的定点小数表示规定,超过了数的表示范围,作溢出处理。
2)如果已经求得第i 次的部分余数r ,若r i <0,则上商为q i -1=0,r i +1=2r i +y 。
上次多减的y 在这次运算中补回来了,否则,商q i =1,ri+1=2r i -y 。
3)不断循环2),直到求得所需要的商的位数(n+1)。
例: x=0.1001, y=-0.1011, 用不恢复余数法求 x/y=? 解: 求解过程如下:所以 x ÷ y 的商 [q ]原 = 0.1101,余数[ r ]原 = 0.000000011.1.2 设计环境MASM1.1.3.程序运行界面被除数x /余数r商数q说明0 0.1 0 0 1 +[-y ]补1 1.0 1 0 1 x 减y1 1.1 1 1 0 余数r 0<0,商0←1 1.1 1 0 0 0 商0,r 和q 左移一位 +[y ]补0 0.1 0 1 1 加y0 0.0 1 1 1 余数r 1>0,商1←0 0.1 1 1 0 0.1 商1,r 和q 左移一位 +[-y ]补1 1.0 1 0 1 减y0 0.0 0 1 1 余数r 2>0,商1←0 0.0 1 1 0 0.1 1 商1,r 和q 左移一位+[-y ]补1 1.0 1 0 1 减y1 1.1 0 1 1 余数r 3<0,商0←1 1.0 1 1 0 0.1 1 0 商0,r 和q 左移一位+[y ]补0 0.1 0 1 1 加y 0 0.0 0 0 1余数r 4>0,商11 1 0 1 商1,仅q 左移一位运行程序,显示“Enter the numbers :”依次输入2个四位小数作为被除数和除数,如0.1001就输入1001(被除数必须小于除数) 显示结果“The answer is : 商 余数” 尚存除尽时余数显示有问题的bug ,待改进1.2 程序流程图程序开始,建立DA TA 段调用IN_DL 过程,读取被除数与除数分别存放在BL 、BH ,将除数的补码存至BHBBL=BL+BHB , CX=4BL<0SHANG+=0 SHANG*=2SHANGBL*=2BL BL=BL+BHSHANG+=1 SHANG*=2SHANG BL*=2BL BL=BL+BHBCX-=1调用Out_DL_oAX 过程,输出SHANG 和BL ,利用PS 确定正负程序结束,中断返回CX=0?YNYN1.3 程序分析1.3.1 输入模块IN_DLIN_DL PROC NEARPUSH AXPUSH CXXOR DL, DLMOV CX, 4INPUT: MOV AH, 1 //调用中断,读取一位输入的ASCII码INT 21HCMP AL, '0' //输入0JE Num01CMP AL, '1' //输入1JE Num01CMP AL, 32 //输入空格JE EOICMP AL, 45 //输入负号JE XPSCALL ERROR_I //其他输入,视为错误,调用ERROR_I XPS: NOT PS //符号位取反INC CX //由于输入了负号,需多输入一位数字Num01: SHL DL, 1SUB AL, '0' //将数字的ASCII码转为数字ADD DL, AL //存放一位LOOP INPUTEOI: P OP CX //输入完毕,结束POP AXRETIN_DL ENDP1.3.2 错误信息模块ERROR_I作用:输入错误时调用,中断程序,并在屏幕上输出:“Error Input!!”的信息1.3.3 输出模块Out_DL_oAXOut_DL_oAX PROC NEARPUSHFPUSH DXPUSH CXPUSH AXMOV DH, DLMOV CL, 8SUB CL, ALSHL DH, CLMOV CL, ALDIS: SHL DH, 1JC DIS1MOV DL, '0'JMP EODDIS1: MOV DL, '1'EOD: MOV AH, 2INT 21HLOOP DIS;LEA DX, LINE;MOV AH, 9;INT 21HPOP AXPOP CXPOP DXPOPFRETOut_DL_oAX ENDP1.3.4 程序主体BEG: ADD BL, BHBAND BL, 3FH XUNHUAN: MOV F, 30HAND F, BLCMP F, 30HJE FUADD SHANG, 1SHL SHANG, 1SHL BL, 1ADD BL, BHBAND BL, 3FHJMP HUIQUXUNHUAN FU: ADD SHANG, 0SHL SHANG, 1SHL BL, 1ADD BL, BHAND BL, 3FH HUIQUXUNHUAN: LOOP XUNHUANMOV F, 30HAND F, BLCMP F, 30HJE LASTFUADD SHANG, 1JMP RESULTLASTFU: ADD SHANG, 01.4.心得体会:在这次的课程设计增进了我很多对汇编语言的理解,也学会了与同学们合理合作,共同成功。
第三章运算方法和运算器3.1补码的移位运算1、左移运算:各位依次左移,末位补0对于算术左移,若没有改变符号位,左移相当于乘以2。
2、右移运算:算术右移:符号位不变,各位(包括符号位)依次右移。
(相当于除以2)逻辑右移:最高位补0,其余各位依次右移例1:已知X=0.1011 ,Y=-0.0101 求 [0.5X]补;[0.25X]补;[-X]补;2[-X]补;[0.5Y]补;[0.25Y]补; [-Y]补;2[-Y]补[X]补=0.1011 [Y]补=1.1011[0.5X]补=0.01011 [0.5Y]补=1.11011[0.25X]补=0.001011 [0.25Y]补=1.111011[-X]补=1.0101 [-Y]补=0.01012[-X]补=0.1010 (溢出) 2[-Y]补=0.10103.2定点加减法运算及其实现3.2.1 补码加减法运算方法由于计算机中的进行定点数的加减运算大都是采用补码。
(1)公式:[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补+[-Y]补(证明过程见教材P38)例1 X=0.001010 Y=-0.100011 求[X-Y]补,[X+Y]补解:[X]补=0.001010 [-Y]补=0.100011则 [X-Y]补=[X]补+[-Y]补=0.001010 + 0.100011=0.101101 [X]补=0.001010 [Y]补=1.011101则 [X+Y]补=[X]补+[Y]补=0.001010 + 1.011101=1.100111例2:已知X=+0.25,Y=-0.625,求X+Y; X-Y写出计算的过程.例3:已知X=25,Y=-9,求X+Y; X-Y写出计算的过程.例4:已知X=-25,Y=-9,求X+Y; X-Y写出计算的过程.解: (8位二进制表示)例2: X=0.0100000 Y=-0.1010000[X]补=0.0100000 [Y]补=1.0110000则 [X+Y]补=[X]补+[Y]补=0.0100000 + 1.0110000=1.1010000[X+Y]原=-0.0110000=(-0.375)D[X]补=0.0100000 ,[-Y]补=0.1010000则 [X-Y]补 = [X]补+[-Y]补 = 0.0100000+0.1010000=0.1110000[X+Y]原 = 0.1110000 =(0.875)D例3: X=+0011001 Y=-0001001[X]补=00011001,[Y]补=11110111则 [X+Y]补 = [X]补+[Y]补= 00011001 + 11110111= 00010000[X+Y]原 =+0010000=(+16)D[X]补= 00011001 ,[-Y]补= 00001001则 [X-Y]补 = [X]补+[-Y]补= 00011001 + 00001001= 00100010[X+Y]原 = +0100010 =(34)D例4: X=-0011001 Y=-0001001[X]补=11100111,[Y]补=11110111则 [X+Y]补 = [X]补+[Y]补= 11100111 + 11110111[X+Y]原 =-00100010=(-34)D[X]补= 11100111 ,[-Y]补= 00001001则 [X-Y]补 = [X]补+[-Y]补= 11100111 + 00001001= 11110000[X+Y]原 = -0010000 =(-16)D3.2.2 定点加减法运算中的溢出问题溢出:运算结果大于机器所能表示的最大正数或者小于机器所能表示的最小负数.溢出只是针对带符号数的运算.比如:[X]补=0.1010,[Y]补=0.1001,那么[X]补+[Y]补=1.0011(溢出)溢出是一种错误,计算机中运算时必须能够发现这个现象,并加以处理判断溢出的方法:1、采用变形补码法[X+Y] 变补=[X] 变补+[Y] 变补[X-Y] 变补=[X] 变补+[-Y] 变补例1 X=0.1011 Y=0.0011 求[X+Y]补解: [X]变补 = 00.1011, [Y]变补 = 00.0011[X+Y]变补 = 00.1011 + 00.0011 = 00.1110所以 [X+Y]补 = 0.1110例2 X=0.1011 Y=0.1001 求[X+Y]补解: [X]变补 = 00.1011 [Y]变补 = 00.1001[X+Y]变补 = 00.1011 + 00.1001 = 01.0100运算结果的两符号位是01,不相同,发生溢出,因第一符号位是0,代表正数,所以称这种溢出为“正溢出”。
计算机组成原理加减交替的阵列除法器实验计算机组成原理是计算机科学中的一门重要课程,而阵列除法器则是其中的重要实验内容之一。
在这个实验中,我们将学习如何利用加减交替的方式来完成除法运算。
阵列除法器是一种计算机硬件,用于执行除法运算。
其核心思想是将被除数不断地与除数进行比较,直到减数小于或等于被除数。
这个过程类似于手算中的竖式除法。
在阵列除法器中,被除数和除数都被表示为二进制数,并通过寄存器进行存储。
被除数和除数都要进行位扩展,保证它们能够进行正常的比较。
除数左移一位相当于乘以2,而右移一位相当于除以2。
在加减交替的过程中,我们先根据除数的最高位,将被除数右移一个位数,并记录下该位数的值,然后使用加法器对被除数进行加减交替操作。
如果被除数大于或等于除数,则表示该位上的商为1,否则商为0。
将得到的商左移一位,然后将被除数和商相减,得到余数。
如果余数小于除数,则表示剩下的所有位数的商都为0。
如果余数大于除数,则使用余数代替被除数,并继续进行加减交替,直到余数小于或等于除数为止。
为了更好地理解这个过程,我们可以通过一个简单的例子来进行说明。
假设我们要计算的是7除以3的结果。
首先将7和3转换为二进制数,得到分别为111和011。
然后进行位扩展,得到1110和0110。
接下来,我们开始进行加减交替的操作。
首先,我们将1110右移一位,得到0111,并将1记录下来。
然后,我们使用加法器对0111和0110进行加减交替操作。
由于0111大于或等于0110,因此我们将得到的商左移一位,得到0010。
然后将0111和0110相减,得到0001。
由于0001小于0110,因此这个过程结束,7除以3的结果为2余1。
通过这个例子,我们可以看到,阵列除法器的加减交替过程虽然比较复杂,但是其本质可以归结为不断地进行位移和加减操作。
掌握了这个原理之后,我们就能够利用阵列除法器来完成更加复杂的除法计算了。
计组加减交替法除法全文共四篇示例,供读者参考第一篇示例:计算机组成原理中的加减交替法除法是计算机运算的一种数值运算方法。
它采用加减法和移位操作,通过不断减少被除数,最终得到商和余数的计算结果。
加减交替法除法是一种比较快速、高效的除法运算方法,尤其在计算机中应用广泛。
加减交替法除法的基本原理是将除法运算转换为多次加减法和移位操作的组合。
假设要计算被除数A除以除数B的结果,首先将A和B 用二进制表示,然后按照以下步骤进行计算:1. 将被除数A左移,使其最高位对齐除数B的最高位,得到A1。
2. 用A1减去B,得到一个新的被除数A2。
3. 比较A2和B的大小,如果A2大于或等于B,则商的对应位为1,否则为0。
4. 将A2左移,重复第2步,直到所有位都计算完毕。
通过上述步骤,可以得到最终的商和余数。
在计算机中,加减交替法除法可以通过硬件或软件实现。
在硬件实现中,除法器会根据指令对操作数进行加减法和移位操作,并返回计算结果。
在软件实现中,程序会通过逐位比较和移位来完成除法运算。
加减交替法除法的效率和速度取决于被除数的大小和除数的大小。
对于大整数的除法运算,加减交替法除法比传统的竖式除法更快更高效。
它可以在几个时钟周期内完成整数除法运算,适用于高性能的计算机系统。
除了整数除法,加减交替法除法也可以用于浮点数的除法运算。
浮点数的除法运算比整数除法更为复杂,需要考虑尾数对阶和规格化等因素。
加减交替法除法在浮点数运算中同样具有重要的作用,能够提高计算效率和精度。
加减交替法除法是一种快速、高效的除法运算方法,适用于整数和浮点数之间的除法计算。
它在计算机系统中起着重要的作用,是提高计算效率和性能的重要手段之一。
随着计算机技术的不断发展,加减交替法除法将继续发挥重要作用,为计算机运算提供更高效的解决方案。
第二篇示例:计组加减交替法除法是一种用于计算除法的特殊方法,它可以帮助我们更快速、更方便地完成除法运算。
在日常生活和工作中,我们经常会遇到需要进行除法运算的情况,比如分配物品、计算成本等。
计算机组成原理--除法器原理
除法器是计算机中的一种基本逻辑功能模块,用于实现除法运算。
除法器的实现原理与方法有很多种,以下是其中一种常见的实现原理:
1. 物理实现
除法器通常由大量的逻辑门电路组成,可以采用不同的实现方式,如串行除法器、并行除法器、移位除法器、余数-商除法器等。
其中,
移位除法器和余数-商除法器是最常用的两种。
2. 操作流程
以余数-商除法器为例,其操作流程如下:
(1)将除数和被除数输入除法器。
(2)将除法器初始化,即将商和余数的初始值设置为0。
(3)按照一定的算法,在每个时钟周期内进行一次除法运算。
(4)在计算过程中,如果余数小于除数,则商的相应位清零,
否则商的相应位为1,并将余数减去除数。
(5)在除法执行完毕后,商即为结果的整数部分,余数即为结
果的小数部分。
3. 特点
除法器的特点包括:
(1)实现较为复杂,需要大量的逻辑门电路,占用较多的芯片
面积和功耗。
(2)除法运算的速度相比加减乘运算较慢,需要多个时钟周期
才能计算完毕。
(3)除法器较为容易出错,需要考虑除法中各种特殊情况的处
理方法,如被除数为0、除数为0、商或余数超出范围等。
(4)除法器通常作为CPU中的一个模块存在,与其他逻辑电路
协同工作,在计算机系统中发挥重要作用。
摩尔定律:对集成电路上可容纳的晶体管数目、性能和价格等发展趋势的预测,其主要内容是:成集电路上可容纳的晶体管数量每18个月翻一番,性能将提高一倍,而其价格将降低一半。
主存: 计算机中存放正在运行的程序和数据的存储器,为计算机的主要工作存储器,可随机存取。
控制器:计算机的指挥中心,它使计算机各部件自动协调地工作。
时钟周期:时钟周期是时钟频率的倒数,也称为节拍周期或T周期,是处理操作最基本的时间单位。
多核处理器:多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。
字长:运算器一次运算处理的二进制位数。
存储容量: 存储器中可存二进制信息的总量。
CPI:指执行每条指令所需要的平均时钟周期数。
MIPS:用每秒钟执行完成的指令数量作为衡量计算机性能的一个指标,该指标以每秒钟完成的百万指令数作为单位。
CPU时间:计算某个任务时CPU实际消耗的时间,也即CPU真正花费在某程序上的时间。
计算机系统的层次结构:计算机系统的层次结构由多级构成,一般分成5级,由低到高分别是:微程序设计级,机器语言级,操作系统级,汇编语言级,高级语言级。
基准测试程序:把应用程序中使用频度最高的那那些核心程序作为评价计算机性能的标准程序。
软/硬件功能的等价性:从逻辑功能的角度来看,硬件和软件在完成某项功能上是相同的,称为软/硬件功能是等价的,如浮点运算既可以由软件实现,也可以由专门的硬件实现。
固件:是一种软件的固化,其目的是为了加快软件的执行速度。
可靠性:可靠性是指系统或产品在规定的条件和规定的时间内,完成规定功能的能力。
产品可靠性定义的要素是三个“规定”:“规定条件”、“规定时间”和“规定功能”。
MTTF:平均无故障时间,指系统自使用以来到第一次出故障的时间间隔的期望值。
MTTR:系统的平均修复时间。
MTBF:平均故障间隔时间,指相邻两次故障之间的平均工作时间。
可用性:指系统在任意时刻可使用的概率,可根据MTTF、MTTR和MTBF等指标计算处系统的可用性。
计算机组成原理--除法器原理及c代码除法器是计算机中的一种重要的算术逻辑单元,用于实现除法运算。
除法器的设计是计算机组成原理中的重要内容之一,本文将从除法器的原理和相关的C代码实现两个方面进行介绍。
一、除法器原理除法器的原理主要包括除法算法和硬件实现两个方面。
1.除法算法在计算机中,除法可以采用多种算法实现,其中最常用的算法是连续除法和恢复余数法。
连续除法是将除数逐位地与被除数相减,判断余数的大小来进行下一步的操作。
具体操作如下:1)将被除数置于一边,余数和商置于另一边;2)被除数减去除数,得到当前位上的余数;3)余数进行左移,并加上下一位的被除数;4)重复上述操作直到计算完所有位。
恢复余数法是将除法过程中的余数加上除数,然后与被除数进行比较,得到商和下一位的余数。
具体操作如下:1)将被除数放在寄存器的高位,余数和商放在低位;2)将寄存器与除数进行比较,若寄存器大于等于除数,说明商的该位为1,余数等于当前寄存器减去除数;3)将寄存器进行左移,并加上下一位的被除数;4)重复上述操作直到计算完所有位。
2.硬件实现硬件实现除法器可以采用著名的Restoring、Non-Restoring和SRT 等算法。
其中Restoring算法是最常用的硬件实现方式。
Restoring算法中,通过比较、左移、减法等操作进行计算。
具体操作如下:1)将除数和被除数放入寄存器的高位和低位,商和余数置零;2)将寄存器与除数进行比较,若寄存器大于等于除数,说明商的该位为1,余数等于当前寄存器减去除数;3)将寄存器逻辑左移一位;4)循环执行2-3步,直到计算完所有位。
二、C代码实现以下是C语言中使用Restoring算法实现的除法器代码:```c#include <stdio.h>unsigned int divide(unsigned int dividend, unsigned int divisor)unsigned int quotient = 0;unsigned int remainder = 0;//32位无符号整数除法for (int i = 31; i >= 0; i--)remainder = (remainder << 1) , ((dividend >> i) & 1); // 将被除数逻辑左移一位,并加上下一位的被除数if (remainder >= divisor) // 判断余数是否大于等于除数remainder -= divisor; // 余数减去除数quotient ,= (1u << i); // 商的该位为1}}return quotient;int mainunsigned int dividend = 53;unsigned int divisor = 5;unsigned int result = divide(dividend, divisor);printf("%u / %u = %u\n", dividend, divisor, result);return 0;```以上的代码实现了一个32位无符号整数的除法操作,通过Restoring算法将除法运算转化为逐位比较、逻辑左移和减法等操作,最终得到商。
计算机组成原理专周报告成都电子机械高等专科学校计算机工程系`目录一、项目名称 (1)二、实验目的 (1)三、不恢复余数的阵列除法器介绍 (1)四、逻辑流程图及原理 (3)算法流程 (3)粗框图 (4)CSA逻辑结构图 (4)原理分析 (5)五、实例结果及求解过程 (8)实例结果图 (8)实例求解过程 (9)六、心得体会: (10)计算机组成原理专周报告一、项目名称原码阵列除法器二、实验目的1)理解原码阵列除法运算的规则。
2)掌握原码阵列除法器设计思想,设计一个原码阵列除法器。
3)熟悉proteus 7 professional软件的使用。
4)复习巩固课堂知识,将所学知识运用于实际,做到学以致用。
三、不恢复余数的阵列除法器介绍阵列式除法器是一种并行运算部件,采用大规模集成电路制造,与早期的串行除法器相比,阵列除法器不仅所需的控制线路少,而且能提供令人满意的高速运算速度。
阵列除法器有多种多样形式,如不恢复余数阵列除法器,补码阵列除法器等等。
我们所用到的就是不恢复余数的阵列除法器。
设:所有被处理的数都是正的小数(仍以定点小数为例)。
不恢复余数的除法也就是加减交替法。
在不恢复余数的除法阵列中,每一行所执行的操作究竟是加法还是减法, 取决于前一行输出的符号与被除数的符号是否一致。
当出现不够减时,部分余数相对于被除数来说要改变符号。
这时应该产生一个商位“0”,除数首先沿对角线右移,然后加到下一行的部分余数上。
当部分余数不改变它的符号时, 即产生商位“1”,下一行的操作应该是减法。
图(四)示出了 (4位÷4位)的不恢复余数阵列除法器的逻辑原理图。
由图看出,该阵列除法器是用一个可控加法/减法(CAS)单元所组成的流水阵列来实现的。
推广到一般情况,一个(n+1)位除(n+1)位的加减交替除法阵列由(n+1)2个CAS单元组成,其中两个操作数(被除数与除数)都是正的。
单元之间的互连是用n=3的阵列来表示的。
计算机组成原理--除法器原理及c代码除法器是计算机中的一个重要组成部分,用于实现除法运算。
除法器可以由硬件电路或软件实现。
硬件电路实现速度快,但成本高,而软件实现则速度慢但成本低。
下面是一些关于除法器原理及C代码的介绍:除法器原理:除法器的原理就是将被除数不断减去除数,直到被除数小于除数为止,被减的次数即为商。
这个过程可以用一个简单的while循环来实现。
除法器的步骤如下:1.读入被除数和除数。
2.判断除数是否为0,若为0,则除法操作失败。
3.对被除数除以除数,在每一次迭代中将被除数减去除数。
4.计算商的值,即被减的次数。
C代码实现:下面是一个简单的C代码实现,实现了除法器的基本功能:```。
#include <stdio.h>。
int main()。
int dividend, divisor, quotient = 0;。
printf("Enter dividend: ");。
scanf("%d", ÷nd);。
printf("Enter divisor: ");。
scanf("%d", &divisor);。
if(divisor == 0) 。
printf("Division by zero error!\n");。
return 0;。
}。
while(dividend >= divisor) 。
dividend = dividend - divisor;。
quotient++;。
}。
printf("Quotient: %d\n", quotient);。
return 0;。
}。
```。
在这个代码段中,我们首先读入了被除数和除数。
然后,我们检查除数是否为0,如果是,则输出错误提示,并退出程序。
接着,我们使用一个while循环来迭代计算商的值。
divisor详细设计方案1.循环型除法器简介:补码除法器。
2.循环型除法器规格:八位循环型除法器。
3.实现原理首先我们看小学时代的一个公式:被除数= 除数X商+ 余数应因小学我们没学过负数,这里假定被除数与除数都是自然数。
能不能为负数呢?下面在说。
循环型触发器的原理其实也很简单就是:判断被除数有多少个除数,满足的条件是商小于除数。
如果用C语言写的话Q = 0;while(rmin << dsor){rmin = rmin –dsor;Q ++;}这里它们都是正数哈,则计算的结果:Q是商,rmin 是余数。
但是我们发现,当rmin 和dsor 大小不一样时,计算所花费的步骤将不一样,这里我们要做的是一个,时钟消耗一样的除法器。
假设被除数A,除数B,商Q=Q3 Q2 Q1 Q0,余数R都是四位二进制数真假A-Bx2^3=R >= 0 ? Q3=1 下一操作A=R Q3=0 下一操作A不变A-Bx2^2=R >= 0 ? Q2=1 下一操作A=R Q2=0 下一操作A不变A-Bx2^1=R >= 0 ? Q1=1 下一操作A=R Q1=0 下一操作A不变A-Bx2^0=R>= 0 ? Q0=1 下一操作A=R Q0=0 下一操作A不变例1:A=10,B=3;10 – 3 x 2^3 = -14 < 0 Q3=010 – 3 x 2^2 = -2 < 0 Q2=010 – 3 x 2^1 = 4 > 0 Q1=14 – 3 x 2^0 = 1 > 0 Q0=1则商Q=1100=3 余数R=1;其实就是第一步:判断Q3是否为一,Q3是第四位权重为2^3=8。
为一的话说明A至少有8个B,即A –8B >= 0,并把余数R赋给A进行下一步操作;第二步:判断Q2是否为一,Q2是第四位权重为2^2=4。
为一的话说明A至少有4个B,即A –4B >= 0,并把余数R赋给A进行下一步操作;第三步:判断Q1是否为一,Q1是第四位权重为2^1=2。
二.不恢复余数法(加减交替法)除法器
1.1 设计
1.1.1 设计原理
对两个正数采用不恢复余数的算法的一般步骤如下。
1)r 1=x-y ,若r 1<0,同时恢复余数:r 1=r 1+y 。
否则,商q 0=1。
说明商大于0。
根据计算机中的定点小数表示规定,超过了数的表示范围,作溢出处理。
2)如果已经求得第i 次的部分余数r ,若r i <0,则上商为q i -1=0,r i +1=2r i +y 。
上次多减的y 在这次运算中补回来了,否则,商q i =1,ri+1=2r i -y 。
3)不断循环2),直到求得所需要的商的位数(n+1)。
例: x=0.1001, y=-0.1011, 用不恢复余数法求 x/y=? 解: 求解过程如下:
所以 x ÷ y 的商 [q ]原 = 0.1101,余数[ r ]原 = 0.00000001
1.1.2 设计环境
MASM
1.1.3.
程序运行界面
被除数x /余数r
商数q
说明
0 0.1 0 0 1 +[-y ]补
1 1.0 1 0 1 x 减y
1 1.1 1 1 0 余数r 0<0,商0
←
1 1.1 1 0 0 0 商0,r 和q 左移一位 +[y ]补
0 0.1 0 1 1 加y
0 0.0 1 1 1 余数r 1>0,商1
←
0 0.1 1 1 0 0.1 商1,r 和q 左移一位 +[-y ]补
1 1.0 1 0 1 减y
0 0.0 0 1 1 余数r 2>0,商1
←
0 0.0 1 1 0 0.1 1 商1,r 和q 左移一位
+[-y ]补
1 1.0 1 0 1 减y
1 1.1 0 1 1 余数r 3<0,商0
←
1 1.0 1 1 0 0.1 1 0 商0,r 和q 左移一位
+[y ]补
0 0.1 0 1 1 加y 0 0.0 0 0 1
余数r 4>0,商1
1 1 0 1 商1,仅q 左移一位
运行程序,显示“Enter the numbers :”
依次输入2个四位小数作为被除数和除数,如0.1001就输入1001(被除数必须小于除数) 显示结果“The answer is : 商 余数” 尚存除尽时余数显示有问题的bug ,待改进
1.2 程序流程图
程序开始,建立DA TA 段
调用IN_DL 过程,读取被除数与除数分别存放在BL 、BH ,将除数的补码存至BHB
BL=BL+BHB , CX=4
BL<0
SHANG+=0 SHANG*=2SHANG
BL*=2BL BL=BL+BH
SHANG+=1 SHANG*=2SHANG BL*=2BL BL=BL+BHB
CX-=1
调用Out_DL_oAX 过程,输出SHANG 和BL ,利用PS 确定正负
程序结束,中断返回
CX=0?
Y
N
Y
N
1.3 程序分析
1.3.1 输入模块IN_DL
IN_DL PROC NEAR
PUSH AX
PUSH CX
XOR DL, DL
MOV CX, 4
INPUT: MOV AH, 1 //调用中断,读取一位输入的ASCII码INT 21H
CMP AL, '0' //输入0
JE Num01
CMP AL, '1' //输入1
JE Num01
CMP AL, 32 //输入空格
JE EOI
CMP AL, 45 //输入负号
JE XPS
CALL ERROR_I //其他输入,视为错误,调用ERROR_I XPS: NOT PS //符号位取反
INC CX //由于输入了负号,需多输入一位数字
Num01: SHL DL, 1
SUB AL, '0' //将数字的ASCII码转为数字
ADD DL, AL //存放一位
LOOP INPUT
EOI: P OP CX //输入完毕,结束
POP AX
RET
IN_DL ENDP
1.3.2 错误信息模块ERROR_I
作用:输入错误时调用,中断程序,并在屏幕上输出:“Error Input!!”的信息
1.3.3 输出模块Out_DL_oAX
Out_DL_oAX PROC NEAR
PUSHF
PUSH DX
PUSH CX
PUSH AX
MOV DH, DL
MOV CL, 8
SUB CL, AL
SHL DH, CL
MOV CL, AL
DIS: SHL DH, 1
JC DIS1
MOV DL, '0'
JMP EOD
DIS1: MOV DL, '1'
EOD: MOV AH, 2
INT 21H
LOOP DIS
;LEA DX, LINE
;MOV AH, 9
;INT 21H
POP AX
POP CX
POP DX
POPF
RET
Out_DL_oAX ENDP
1.3.4 程序主体
BEG: ADD BL, BHB
AND BL, 3FH XUNHUAN: MOV F, 30H
AND F, BL
CMP F, 30H
JE FU
ADD SHANG, 1
SHL SHANG, 1
SHL BL, 1
ADD BL, BHB
AND BL, 3FH
JMP HUIQUXUNHUAN FU: ADD SHANG, 0
SHL SHANG, 1
SHL BL, 1
ADD BL, BH
AND BL, 3FH HUIQUXUNHUAN: LOOP XUNHUAN
MOV F, 30H
AND F, BL
CMP F, 30H
JE LASTFU
ADD SHANG, 1
JMP RESULT
LASTFU: ADD SHANG, 0
1.4.心得体会:
在这次的课程设计增进了我很多对汇编语言的理解,也学会了与同学们合理合作,共同成功。
虽然编程技巧还略显生疏(比如有除尽余数不为0的bug),但已经对汇编语言的概念和使用加深了不小的了解,我会在接下来的课程设计中继续并更加努力做出更好的作品。