第-3-章-運(yùn)算方法與運(yùn)算器課件_第1頁(yè)
第-3-章-運(yùn)算方法與運(yùn)算器課件_第2頁(yè)
第-3-章-運(yùn)算方法與運(yùn)算器課件_第3頁(yè)
第-3-章-運(yùn)算方法與運(yùn)算器課件_第4頁(yè)
第-3-章-運(yùn)算方法與運(yùn)算器課件_第5頁(yè)
已閱讀5頁(yè),還剩289頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第3章運(yùn)算方法與運(yùn)算器7/23/20231

?第7版2011.09本章學(xué)習(xí)內(nèi)容基本算術(shù)邏輯運(yùn)算電路定點(diǎn)加、減、乘、除運(yùn)算浮點(diǎn)加、減、乘、除運(yùn)算十進(jìn)制數(shù)的運(yùn)算7/23/202323.1運(yùn)算器的設(shè)計(jì)方法

運(yùn)算器所具有的只是簡(jiǎn)單的算術(shù)、邏輯運(yùn)算以及移位、計(jì)數(shù)等功能。計(jì)算機(jī)中對(duì)數(shù)據(jù)信息的加工的基本思想:將各種復(fù)雜的運(yùn)算處理分解為最基本的算術(shù)運(yùn)算和邏輯運(yùn)算。例如在算術(shù)運(yùn)算中,可以通過補(bǔ)碼運(yùn)算將減法化為加法;利用加減運(yùn)算與移位功能的配合實(shí)現(xiàn)乘除運(yùn)算;通過階碼與尾數(shù)的運(yùn)算組合實(shí)現(xiàn)浮點(diǎn)運(yùn)算。

7/23/20233運(yùn)算器邏輯組織結(jié)構(gòu)設(shè)計(jì)的層次⑴

根據(jù)機(jī)器的字長(zhǎng),將N個(gè)一位全加器通過加法進(jìn)位鏈連接構(gòu)成N位并行加法器。⑵利用多路選擇邏輯在加法器的輸入端實(shí)現(xiàn)多種輸入組合,將加法器擴(kuò)展為多功能的算術(shù)/邏輯運(yùn)算部件。⑶根據(jù)乘除運(yùn)算的算法,將加法器與移位器組合,構(gòu)成定點(diǎn)乘法器與除法器。將計(jì)算定點(diǎn)整數(shù)的階碼運(yùn)算器和計(jì)算定點(diǎn)小數(shù)的尾數(shù)運(yùn)算器組合構(gòu)成浮點(diǎn)運(yùn)算器。⑷

在算術(shù)/邏輯運(yùn)算部件的基礎(chǔ)上,配合各類相關(guān)的寄存器,構(gòu)成計(jì)算機(jī)中的運(yùn)算器。

7/23/202343.2定點(diǎn)補(bǔ)碼加減運(yùn)算原碼加減運(yùn)算規(guī)則:首先判斷參加運(yùn)算的兩個(gè)操作數(shù)的符號(hào),再根據(jù)操作的要求決定進(jìn)行相加還是相減操作。運(yùn)算時(shí),符號(hào)位不參加運(yùn)算,只有兩數(shù)的絕對(duì)值參加運(yùn)算。最后根據(jù)兩個(gè)操作數(shù)絕對(duì)值的大小決定結(jié)果的符號(hào)。∵大多數(shù)計(jì)算機(jī)中只設(shè)置加法器∴做原碼減法運(yùn)算時(shí)

用|x|+[|y|]變補(bǔ)代替|x|-|y|7/23/20235原碼加減運(yùn)算步驟⑴判斷參加運(yùn)算的兩個(gè)操作數(shù)的符號(hào),決定進(jìn)行相加還是相減操作。⑵取參加運(yùn)算的操作數(shù)的絕對(duì)值。⑶若做加法,則兩數(shù)直接相加;若做減法,則將減數(shù)先變一次補(bǔ),再進(jìn)行加法運(yùn)算。7/23/20236⑷運(yùn)算結(jié)果的處理:①加法運(yùn)算:無進(jìn)位,即得到正確結(jié)果。

有進(jìn)位,結(jié)果溢出。②減法運(yùn)算:有進(jìn)位,結(jié)果為正,即得到正確結(jié)果。

無進(jìn)位,結(jié)果為負(fù),需將結(jié)果再變一次補(bǔ),

得到正確結(jié)果。⑸取絕對(duì)值大的操作數(shù)的符號(hào)作為結(jié)果的符號(hào),給結(jié)果加上符號(hào)位。7/23/202373.2.1補(bǔ)碼運(yùn)算的基礎(chǔ)由于原碼加減算法復(fù)雜,而補(bǔ)碼表示可以把加法、減法均轉(zhuǎn)換為加法,大大簡(jiǎn)化了加減運(yùn)算算法,所以在計(jì)算機(jī)中均采用補(bǔ)碼加減運(yùn)算。補(bǔ)碼運(yùn)算:參加運(yùn)算的操作數(shù)均用補(bǔ)碼表示并且運(yùn)算結(jié)果也以補(bǔ)碼表示。7/23/202381.補(bǔ)碼加法補(bǔ)碼加法的基本關(guān)系:[x]補(bǔ)+[y]補(bǔ)=[x+y]補(bǔ)

(modM)(3-1)即兩數(shù)補(bǔ)碼之和等于兩數(shù)之和的補(bǔ)碼。式(3-1)中:若x,y是定點(diǎn)小數(shù),則Mod=2;若x,y是定點(diǎn)整數(shù),則Mod=2n+1,n為定點(diǎn)整數(shù)數(shù)值部分的位數(shù)。7/23/20239以定點(diǎn)小數(shù)為例證明式(3-1)的正確性。證明:設(shè)x,y的取值范圍分別為-1≤x<1,

-1≤y<1;兩數(shù)之和x+y的值在正常范圍之內(nèi),即:-1≤x+y<1。(1)設(shè)x≥0,y≥0,則x+y≥0由補(bǔ)碼定義:[x]補(bǔ)=x,[y]補(bǔ)=y(tǒng),得:[x]補(bǔ)+[y]補(bǔ)=x+y=[x+y]補(bǔ)7/23/202310(2)設(shè)x≥0,y<0且|x|≥|y|由補(bǔ)碼定義[x]補(bǔ)=x,[y]補(bǔ)=2+y(mod2)得:[x]補(bǔ)+[y]補(bǔ)=2+x+y∵|x|≥|y|,∴x+y≥0,[x+y]補(bǔ)=x+y∵2+x+y≥2∴[x]補(bǔ)+[y]補(bǔ)=x+y(mod2)即證得[x]補(bǔ)+[y]補(bǔ)=[x+y]補(bǔ)7/23/202311(3)設(shè)x≥0,y<0且|x|<|y|由補(bǔ)碼定義[x]補(bǔ)=x,[y]補(bǔ)=2+y(mod2)得:[x]補(bǔ)+[y]補(bǔ)=2+x+y∵|x|<|y|∴x+y<0[x+y]補(bǔ)=2+x+y=[x]補(bǔ)+[y]補(bǔ)(mod2)7/23/202312(4)設(shè)x<0,y<0由補(bǔ)碼定義:[x]補(bǔ)=2+x,[y]補(bǔ)=2+y(mod2)得:[x]補(bǔ)+[y]補(bǔ)=2+x+2+y

=2+2+x+y舍去模2,得[x]補(bǔ)+[y]補(bǔ)=2+x+y∵x<0,y<0,x+y<0∴[x+y]補(bǔ)=2+x+y=[x]補(bǔ)+[y]補(bǔ)當(dāng)x<0,y≥0時(shí),證明方法與(2)、(3)相同。到此得證:[x]補(bǔ)+[y]補(bǔ)=[x+y]補(bǔ)7/23/202313補(bǔ)碼減法的基本關(guān)系:[x]補(bǔ)-[y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)=[x-y]補(bǔ)

(3-2)即兩數(shù)補(bǔ)碼之差等于兩數(shù)之差的補(bǔ)碼。式(3-2)中,如果x,y是定點(diǎn)小數(shù),則Mod=2;如果x,y是定點(diǎn)整數(shù),則Mod=2n+1,n為定點(diǎn)整數(shù)數(shù)值部分的位數(shù)。

2.補(bǔ)碼減法

7/23/202314以定點(diǎn)小數(shù)為例證明式(3-2)的正確性。根據(jù)式(3-1),可知:[x]補(bǔ)+[-y]補(bǔ)=[x+(-y)]補(bǔ)=[x-y]補(bǔ)

∵[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)∴[x]補(bǔ)+[-y]補(bǔ)=[x-y]補(bǔ),[x]補(bǔ)-[y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)=[x-y]補(bǔ)只要證明[-y]補(bǔ)=-[y]補(bǔ)成立,由[x]補(bǔ)-[y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)=[x-y]補(bǔ)就可得式(3-2)成立。7/23/202315證明:∵[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)∴[y]補(bǔ)=[x+y]補(bǔ)-[x]補(bǔ)∵[x-y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)∴[-y]補(bǔ)=[x-y]補(bǔ)-[x]補(bǔ)∵[y]補(bǔ)+[-y]補(bǔ)=[x+y]補(bǔ)+[x-y]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=[x+y+x-y]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=[x+x]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=[x]補(bǔ)+[x]補(bǔ)-[x]補(bǔ)-[x]補(bǔ)=0∴-[y]補(bǔ)=[-y]補(bǔ)7/23/202316①參加運(yùn)算的各個(gè)操作數(shù)均以補(bǔ)碼表示,運(yùn)算結(jié)果仍以補(bǔ)碼表示。②符號(hào)位與數(shù)值位一樣參加運(yùn)算。③若求和,則將兩補(bǔ)碼數(shù)直接相加,得到兩數(shù)之和的補(bǔ)碼;

若求差,則將減數(shù)變補(bǔ)(由[y]補(bǔ)求[-y]補(bǔ)),然后與被減數(shù)相加,得到兩數(shù)之差的補(bǔ)碼。④補(bǔ)碼總是對(duì)確定的模而言,若運(yùn)算結(jié)果超過模(有從符號(hào)位上產(chǎn)生的進(jìn)位),則將模自動(dòng)丟掉。補(bǔ)碼運(yùn)算的基本規(guī)則7/23/202317例3.1x=+0.1001,y=+0.0101,求x±y=?解:[x]補(bǔ)=0.1001,[y]補(bǔ)=0.0101,

[-y]補(bǔ)=1.1011[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)

=0.1001+0.0101=0.1110x+y=0.11100.10010.0101+0.11100.10011.1011+0.01001丟模[x-y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)

=0.1001+1.1011=0.0100x-y=0.01007/23/202318例3.2x=-0.0110,y=-0.0011,求x±y=?解:[x]補(bǔ)=1.1010,[y]補(bǔ)=1.1101,

[-y]補(bǔ)=0.0011[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)

=1.1010+1.1101=1.0111x+y=-0.10011.10101.1101+1.01111.10100.0011+1.11011丟模[x-y]補(bǔ)=[x]補(bǔ)+[-y]補(bǔ)

=1.1010+0.0011=1.1101x-y=-0.00117/23/202319例3.3x=+0.1010,y=+0.1001,

求x+y=?解:[x]補(bǔ)=0.1010,[y]補(bǔ)=0.1001,[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)

=0.1010+0.10010.10100.1001+1.00111結(jié)果溢出7/23/202320例3.4x=-0.1101,y=-0.1011,

求x+y=?解:[x]補(bǔ)=1.0011,[y]補(bǔ)=1.0101,[x+y]補(bǔ)=[x]補(bǔ)+[y]補(bǔ)

=1.0011+1.01011.00111.0101+0.10001結(jié)果溢出7/23/202321如果兩個(gè)正數(shù)相加,得到結(jié)果的符號(hào)為負(fù);兩個(gè)負(fù)數(shù)相加,得到的結(jié)果為正,則運(yùn)算結(jié)果是錯(cuò)誤的。造成錯(cuò)誤的原因,是因?yàn)檫\(yùn)算結(jié)果超出了機(jī)器所能表示的數(shù)據(jù)范圍,數(shù)值位侵占了符號(hào)位,正確符號(hào)被擠走了。正溢出:兩個(gè)正數(shù)相加的結(jié)果超出機(jī)器所能表示的最大正數(shù)。負(fù)溢出:兩個(gè)負(fù)數(shù)相加的結(jié)果小于機(jī)器所能表示的最小負(fù)數(shù)。出現(xiàn)溢出后,機(jī)器將無法正確表示,因此必須正確判別溢出并及時(shí)加以處理。7/23/202322

3.2.2溢出判別與變形補(bǔ)碼設(shè)參加運(yùn)算的操作數(shù)為[x]補(bǔ)=xf.x1x2…xn[y]補(bǔ)=y(tǒng)f.y1y2…yn

[x]補(bǔ)+[y]補(bǔ)的和為:[s]補(bǔ)=sf.s1s2…sn

發(fā)生溢出時(shí)

OVR=1常用判斷溢出的方法1.根據(jù)兩個(gè)操作數(shù)的符號(hào)與結(jié)果的符號(hào)判別溢出由于參加運(yùn)算的數(shù)都是定點(diǎn)數(shù),所以只有兩數(shù)同號(hào)時(shí)相加才可能溢出。所以溢出的條件為:OVR=xfyfsf+xfyfsf=(xf⊕sf)(yf⊕sf)(3-3)即xf和yf均與sf不同時(shí),產(chǎn)生溢出。7/23/2023231.00111.0101+0.10001如xfyfsf+xfyfsf

=1

Cf⊕C1=12.根據(jù)兩數(shù)相加時(shí)產(chǎn)生的進(jìn)位判別溢出設(shè)Cf為符號(hào)位上產(chǎn)生的進(jìn)位,C1為最高數(shù)值位上產(chǎn)生的進(jìn)位,則溢出的條件為:OVR=CfC1+CfC1=Cf⊕C1(3-4)即若進(jìn)入符號(hào)位的進(jìn)位和從符號(hào)位上產(chǎn)生的進(jìn)位不相等,則產(chǎn)生溢出。有的資料中將Cf寫為C0,所以溢出條件為OVR=C0C1+C0C1=C0⊕C17/23/202324溢出判斷電路&=1=1XfSfYfOVR=1OVRCfC17/23/2023253.采用變形補(bǔ)碼進(jìn)行運(yùn)算

使用一個(gè)符號(hào)位進(jìn)行運(yùn)算,當(dāng)出現(xiàn)溢出時(shí),正確的符號(hào)將被數(shù)值位侵占,符號(hào)位含義就會(huì)發(fā)生混亂。如果采用兩個(gè)符號(hào)位進(jìn)行運(yùn)算,即使因出現(xiàn)溢出侵占了一個(gè)符號(hào)位,仍能保持最左邊符號(hào)是正確的。變形補(bǔ)碼:用兩個(gè)符號(hào)位表示的補(bǔ)碼。也稱雙符號(hào)位補(bǔ)碼。7/23/202326變形補(bǔ)碼的定義純小數(shù)的變形補(bǔ)碼純整數(shù)的變形補(bǔ)碼7/23/202327變形補(bǔ)碼的形式:

[x]變形補(bǔ)=xf1xf2.x1x2…xn設(shè)和的變形補(bǔ)碼為[s]變形補(bǔ)=sf1sf2.s1s2…sn變形補(bǔ)碼的溢出判斷條件:

OVR=sf1⊕sf2即當(dāng)結(jié)果的兩個(gè)符號(hào)位不一致時(shí),出現(xiàn)溢出。其中:sf1sf2=00或11表示正常補(bǔ)碼sf1sf2=01表示正溢出sf1sf2=10表示負(fù)溢出7/23/202328例3.5x=+0.1001,y=+0.0101,求x+y=?解:

[x]變形補(bǔ)=00.1001,[y]變形補(bǔ)=00.010100.100100.0101+00.1110[x+y]變形補(bǔ)=00.1001+00.0101=00.1110x+y=0.11107/23/202329例3.6x=-0.0110,y=-0.0011,求x+y=?解:[x]變形補(bǔ)=11.1010,[y]變形補(bǔ)=11.1101,

11.101011.1101+11.01111丟模[x+y]變形補(bǔ)=11.1010+11.1101=11.0111x+y=-0.10017/23/202330例3.7⑴x=+0.1010,y=+0.1001⑵x=-0.1101,y=-0.1011求x+y=?解:⑴[x]變形補(bǔ)=00.1010,[y]變形補(bǔ)=00.1001,[x+y]變形補(bǔ)=00.1010+00.1001sf1⊕sf2=1運(yùn)算結(jié)果溢出00.101000.1001+01.0011正溢出7/23/202331⑵[x]變形補(bǔ)=11.0011,[y]變形補(bǔ)=11.0101,[x+y]變形補(bǔ)=11.0011+11.0101sf1⊕sf2=1運(yùn)算結(jié)果溢出11.001111.0101+10.10001負(fù)溢出7/23/202332分析sf1、sf2的含義可知,無論運(yùn)算結(jié)果是否產(chǎn)生溢出,第一符號(hào)位sf1始終指示結(jié)果的正確的正負(fù)符號(hào)。變形補(bǔ)碼在正常情況下,sf1=sf2

,所以存儲(chǔ)數(shù)據(jù)時(shí)采用正常補(bǔ)碼,只在運(yùn)算時(shí)采用變形補(bǔ)碼,以便判別溢出。變形補(bǔ)碼的溢出判斷電路:=1OVRSf1Sf27/23/2023333.2.3算術(shù)邏輯運(yùn)算部件

運(yùn)算器的基本功能是進(jìn)行算術(shù)邏輯運(yùn)算,其最基本也是最核心的部件是加法器。在加法器的輸入端加入多種輸入控制功能,就能將加法器擴(kuò)展為多功能的算術(shù)/邏輯運(yùn)算部件。

7/23/2023341.補(bǔ)碼加減運(yùn)算的邏輯實(shí)現(xiàn)

根據(jù)

[A]補(bǔ)+[B]補(bǔ)=[A+B]補(bǔ)

[A]補(bǔ)-[B]補(bǔ)=[A]補(bǔ)+[-B]補(bǔ)

=[A]補(bǔ)+[B]補(bǔ)+1=[A-B]補(bǔ)補(bǔ)碼加減運(yùn)算的硬件實(shí)現(xiàn)電路的基本原理仍是加法器,只要在加法器的A、B輸入端增加控制信號(hào),即可控制實(shí)現(xiàn)加法和減法?!連⊕1=B∴在需要作減法時(shí),將輸入到加法器B端的內(nèi)容的取反(B⊕1)后送入加法器,并使最低進(jìn)位C0=1,即可實(shí)現(xiàn)減法運(yùn)算。7/23/202335采用串行進(jìn)位的補(bǔ)碼加減運(yùn)算邏輯電路

7/23/202336M=0Bi通過異或門與0異或,Bi⊕0=Bi,

C0=0作A+BM=1Bi通過異或門與1異或,Bi⊕1=Bi,

C0=1作A-B電路中采用進(jìn)出符號(hào)位的進(jìn)位進(jìn)行溢出判斷。

OVR=Cn⊕Cn-17/23/2023372.實(shí)現(xiàn)補(bǔ)碼加減運(yùn)算的邏輯電路在實(shí)際應(yīng)用中,兩個(gè)操作數(shù)需要存放在寄存器中,運(yùn)算時(shí)送到運(yùn)算器中進(jìn)行運(yùn)算,運(yùn)算結(jié)果再送到寄存器中保存。在實(shí)際的運(yùn)算器中,參加運(yùn)算的操作數(shù)和運(yùn)算結(jié)果通常都存放在寄存器中,控制器通過對(duì)指令譯碼得到控制信號(hào),控制將操作數(shù)輸入加法器及將運(yùn)算結(jié)果寫回寄存器。7/23/202338補(bǔ)碼加減運(yùn)算的邏輯電路

A←(A)±(B)7/23/202339A寄存器:運(yùn)算前存放操作數(shù),運(yùn)算后存放運(yùn)算結(jié)果。也稱為累加器。B寄存器:有兩個(gè)輸出端B和B。由加、減法指令控制產(chǎn)生ADD和SUB信號(hào)。執(zhí)行加法指令:ADD=1執(zhí)行減法指令:SUB=1ADD=0&SUB=0執(zhí)行的不是加、減法指令參加運(yùn)算的兩個(gè)補(bǔ)碼數(shù)分別存放在寄存器A、B中,運(yùn)算結(jié)果保存在寄存器A中。7/23/202340運(yùn)算控制信號(hào)的邏輯條件為:

F←A=ADD+SUBF←B=ADDF←B=SUBC0←1=SUBA←F=ADD+SUB7/23/2023412.算術(shù)邏輯運(yùn)算部件舉例

除了加減運(yùn)算,運(yùn)算器還需要完成其它算術(shù)邏輯運(yùn)算,在加法器的輸入端加以多種輸入控制,就可以將加法器的功能進(jìn)行擴(kuò)展。算術(shù)邏輯運(yùn)算單元(簡(jiǎn)稱ALU)是一種以加法器為基礎(chǔ)的多功能組合邏輯電路。ALU的基本設(shè)計(jì)思想:在加法器的輸入端加入一個(gè)函數(shù)發(fā)生器,這個(gè)函數(shù)發(fā)生器可以在多個(gè)控制信號(hào)的控制下,為加法器提供不同的輸入函數(shù),從而構(gòu)成一個(gè)具有較完善的算術(shù)邏輯運(yùn)算功能的運(yùn)算部件。

7/23/202342ALU組件——SN74181

7/23/202343SN74181:4位ALU組件,可以實(shí)現(xiàn)16種算術(shù)運(yùn)算功能和16種邏輯運(yùn)算功能,其具體功能由S3S2S1S0和M信號(hào)控制實(shí)現(xiàn),見P77表3-1。

SN74181有正邏輯和負(fù)邏輯兩種芯片。圖3-4為采用負(fù)邏輯方式工作的SN74181芯片的外部特性。

7/23/202344A3~0、B3~0:參加運(yùn)算的兩組4位操作數(shù);Cn:低位來的進(jìn)位;F3~0:輸出的運(yùn)算結(jié)果;Cn+4:向高位的進(jìn)位;G:小組本地進(jìn)位;P:小組傳遞函數(shù);A=B:兩個(gè)操作數(shù)的相等。如果將多個(gè)74181的“A=B”端按“與”邏輯連接,就可以檢測(cè)兩個(gè)字長(zhǎng)超過4位的操作數(shù)的相等情況。7/23/202345S3S2S1S0:控制產(chǎn)生16種不同的邏輯函數(shù);M:控制芯片執(zhí)行算術(shù)運(yùn)算還是邏輯運(yùn)算。M=0:允許加法器位間進(jìn)位,執(zhí)行算術(shù)運(yùn)算;M=1:封鎖加法器位間進(jìn)位,執(zhí)行邏輯運(yùn)算。7/23/202346多片SN74181組合,可以構(gòu)成更多位數(shù)的ALU。將SN74181與并行進(jìn)位鏈芯片SN74182配合,可以組成快速的并行加法器。

7/23/2023473.3定點(diǎn)乘法運(yùn)算計(jì)算機(jī)中實(shí)現(xiàn)乘除運(yùn)算通常采用以下三種方式:

⑴利用乘除運(yùn)算子程序

⑵在加法器的基礎(chǔ)上增加左、右移位及計(jì)數(shù)器等邏輯線路構(gòu)成乘除運(yùn)算部件。⑶設(shè)置專用的陣列乘除運(yùn)算器

7/23/202348

3.3.1原碼乘法運(yùn)算原碼乘法:參加運(yùn)算的被乘數(shù)和乘數(shù)均用原碼表示;運(yùn)算時(shí)符號(hào)位單獨(dú)處理,被乘數(shù)與乘數(shù)的絕對(duì)值相乘;所得的積也采用原碼表示。

在定點(diǎn)機(jī)中,兩個(gè)數(shù)的原碼乘法運(yùn)算包括:⑴乘積的符號(hào)處理⑵兩數(shù)絕對(duì)值相乘7/23/202349設(shè)被乘數(shù):[x]原=xf

.x1x2…xn

乘數(shù):[y]原=y(tǒng)f

.y1y2…yn

乘積:[z]原=[x]原×[y]原

=[x×y]原=zf

.z1z2…zn

根據(jù)“同號(hào)相乘,乘積為正;異號(hào)相乘,乘積為負(fù)”,得乘積的符號(hào):zf=xf⊕yf7/23/202350例3.8:x=0.1101,y=0.1011求x×y=?解:根據(jù)二進(jìn)制乘法規(guī)律,可得x×y的手算過程如下:

得:x×y=0.100011117/23/202351從例3.8可以看出,兩個(gè)4位數(shù)相乘得8位乘積,共4個(gè)部分積需8位加法器相加。由此可見,兩個(gè)n位數(shù)相乘,得2n位乘積,共有n個(gè)部分積。①2n位乘積需用2n位加法器進(jìn)行相加運(yùn)算。②兩個(gè)n位數(shù)相乘,需n個(gè)寄存器保存n個(gè)部分積。顯然所需硬件太多,不適合用硬件去實(shí)現(xiàn),為此需對(duì)算法加以改進(jìn)。7/23/2023521.一位原碼乘法運(yùn)算設(shè)參加運(yùn)算的被乘數(shù)為x=0.x1x2…x4,

乘數(shù)為y=0.y1y2…y4,有:

x×y=x×0.y1y2y3y4=x×(2-1y1+2-2y2+2-3y3+2-4y4)=2-1xy1+2-2xy2+2-3xy3+2-4xy4=2-1{2-3xy4+2-2xy3+2-1xy2+xy1}=2-1{2-1[2-2xy4+2-1xy3+xy2]+xy1}=2-1{2-1[2-1(2-1xy4+xy3)+xy2]+xy1}=2-1{2-1[2-1(2-1<0+xy4>+xy3)+xy2]+xy1}7/23/202353根據(jù)上式,可將乘法轉(zhuǎn)換為一系列加法與移位操作。將遞推公式推廣到n位,得:Z0=0(初始部分積為0)Z1=2-1(Z0+xyn)Z2=2-1(Z1+xyn-1)…Zn=2-1(Zn-1+xy1)=x×y其中,Z0、Z1、…、Zn稱為部分積。根據(jù)上述推導(dǎo)過程可知,可以把乘法轉(zhuǎn)換為一系列加法與移位操作。7/23/202354原碼一位乘法的算法①

積的符號(hào)單獨(dú)按兩操作數(shù)的符號(hào)模2加(異或)得到。用被乘數(shù)和乘數(shù)的數(shù)值部分進(jìn)行運(yùn)算。②以乘數(shù)的最低位作為乘法判別位,若判別位為1,則在前次部分積(初始部分積為0)上加上被乘數(shù),然后連同乘數(shù)一起右移一位;若判別位為0,則在前次部分積上加0(或不加),然后連同乘數(shù)一起右移一位。③重復(fù)第②步直到運(yùn)算n次為止。(n為乘數(shù)數(shù)值部分的長(zhǎng)度)

④將乘積的符號(hào)與數(shù)值部分結(jié)合,即可得到最終結(jié)果。

7/23/202355例3.9設(shè)x=0.1101,y=-0.1011,根據(jù)原碼一位乘法的算法計(jì)算x×y=?。解:[x]原=0.1101,[y]原=1.1011,乘積[z]原=[x×y]原

①符號(hào)位單獨(dú)處理得zf=0⊕1=1②將被乘數(shù)和乘數(shù)的絕對(duì)值的數(shù)值部分相乘。[|x|]原=0.1101[|y|]原=0.1011數(shù)值部分為4位,共需運(yùn)算4次。7/23/202356部分積

乘數(shù)

yn

說明

0.00001011

初始部分積

Z0=0+0.1101

∵乘數(shù)yn=1,∴

加x;

0.11010.01101101

部分積與乘數(shù)同時(shí)右移一位;+0.1101

∵乘數(shù)yn=1,∴

加x;

1.00110.10011110

部分積與乘數(shù)同時(shí)右移一位;+0.0000

∵乘數(shù)yn=0,∴

加0;

0.10010.0100111

1

部分積與乘數(shù)同時(shí)右移一位+0.1101

∵乘數(shù)yn=1,∴

加x;

1.00010.10001111

部分積與乘數(shù)同時(shí)右移一位,運(yùn)算了4次,計(jì)算結(jié)束。7/23/202357得:|x×y|=0.10001111加上符號(hào)部分得:[x×y]原=1.10001111即:x×y=-0.100011117/23/202358原碼一位乘法算法的硬件邏輯電路7/23/202359A寄存器:存放部分積高位部分,初始為0B寄存器:存放被乘數(shù)C寄存器:存放乘數(shù)和部分積低位部分,初始為乘數(shù)CR:計(jì)數(shù)器。用于記錄乘法次數(shù)運(yùn)算初始時(shí),CR=0,每進(jìn)行一次運(yùn)算CR+1,當(dāng)計(jì)數(shù)到CR=n時(shí),將CT清0,結(jié)束運(yùn)算。Cj:進(jìn)位位CT:乘法控制觸發(fā)器,CT=1,允許發(fā)出移位脈沖,進(jìn)行乘法運(yùn)算CT=0,不允許發(fā)出移位脈沖,停止乘法運(yùn)算7/23/202360寄存器C通常是具有左移、右移功能的移位寄存器。寄存器A一般不具有移位功能,部分積的移位采用斜送的方法實(shí)現(xiàn)移位。7/23/202361具有左、右斜送和直接傳送的移位器Fi:加法器的i位輸出A←2F:左移控制信號(hào)A←1/2F:右移控制信號(hào)A←F:直接傳送控制信號(hào)Ff.F1F2F3F47/23/202362原碼一位乘法的運(yùn)算流程7/23/202363作業(yè)用原碼一位乘法完成P1323.4(2)(3)7/23/2023643.2.2補(bǔ)碼乘法運(yùn)算因?yàn)檠a(bǔ)碼加減運(yùn)算簡(jiǎn)單,在實(shí)際機(jī)器中都采用補(bǔ)碼加減運(yùn)算,因此不少機(jī)器也采用補(bǔ)碼乘法,以減少原碼與補(bǔ)碼之間的不斷轉(zhuǎn)換。計(jì)算機(jī)中常用的補(bǔ)碼乘法算法,稱為比較法或加減交替乘法。因?yàn)槭怯刹妓狗驄D提出的,所以也稱布斯乘法。7/23/2023651.補(bǔ)碼一位乘法以定點(diǎn)小數(shù)為例.設(shè)被乘數(shù)x的補(bǔ)碼為

[x]補(bǔ)=x0.x1x2…xn,乘數(shù)y的補(bǔ)碼為

[y]補(bǔ)=y(tǒng)0.y1y2…yn,乘積為[Z]補(bǔ)=[x×y]補(bǔ)。⑴

被乘數(shù)x的符號(hào)任意,乘數(shù)y為正數(shù),即:[x]補(bǔ)=x0.x1x2…xn[y]補(bǔ)=0.y1y2…yn有:[x]補(bǔ)=2+x=2n+1+x(Mod2)[y]補(bǔ)=y(tǒng)

7/23/202366[x]補(bǔ)×[y]補(bǔ)=2n+1y+x×y=2×(y1y2…yn)+x×y(Mod2)∵y1y2…yn為大于0的正整數(shù),根據(jù)模2性質(zhì):

2×(y1y2…yn)=2(Mod2)∴[x]補(bǔ)×[y]補(bǔ)=2+x×y=[x×y]補(bǔ)∵y>0,[y]補(bǔ)=y(tǒng),y0=0

∴[x×y]補(bǔ)=[x]補(bǔ)×[y]補(bǔ)=[x]補(bǔ)×y

=[x]補(bǔ)×(0.y1y2…yn)=[x]補(bǔ)×

7/23/202367⑵設(shè)被乘數(shù)x的符號(hào)任意,乘數(shù)y為負(fù)數(shù):[x]補(bǔ)=x0.x1x2…xn

[y]補(bǔ)=1.y1y2…yn=2+y(Mod2)

∵y=[y]補(bǔ)-2=0.y1y2…yn-1

∴x×y=x×(0.y1y2…yn)-x,得:[x×y]補(bǔ)=[x×(0.y1y2…yn)]補(bǔ)-[x]補(bǔ)

∵0.y1y2…yn>0,∴[x×(0.y1y2…yn)]補(bǔ)=[x]補(bǔ)×(0.y1y2…yn)

得:[x×y]補(bǔ)=[x]補(bǔ)×(0.y1y2…yn)-[x]補(bǔ)

7/23/202368⑶設(shè)被乘數(shù)x和乘數(shù)y均為的任意符號(hào)數(shù),將情況⑴、⑵綜合,可得:[x×y]補(bǔ)=[x]補(bǔ)×(0.y1y2…yn)-[x]補(bǔ)×y0=[x]補(bǔ)×(0.y1y2…yn-y0)

=[x]補(bǔ)×(-y0+)

=-y0[x]補(bǔ)+2-1y1[x]補(bǔ)+2-2y2[x]補(bǔ)

+…+2-nyn[x]補(bǔ)

=(y1-y0)[x]補(bǔ)+2-1(y2-y1)[x]補(bǔ)

+2-2(y3-y2)[x]補(bǔ)+…+

+2-(n-1)(yn-yn-1)[x]補(bǔ)+2-n(yn+1-yn)[x]補(bǔ)

(初始yn+1=0)

7/23/202369令部分積的初始值[Z0]補(bǔ)=0,得部分積的遞推形式:[Z0]補(bǔ)=0(初始部分積為0)[Z1]補(bǔ)=2-1{[Z0]補(bǔ)+(yn+1-yn)[x]補(bǔ)}[Z2]補(bǔ)=2-1{[Z1]補(bǔ)+(yn-yn-1)[x]補(bǔ)}……[Zi]補(bǔ)=2-1{[Zi-1]補(bǔ)+(yn-i+2-yn-i+1)[x]補(bǔ)}……[Zn]補(bǔ)=2-1{[Zn-1]補(bǔ)+(y2-y1)[x]補(bǔ)}[Zn+1]補(bǔ)={[Zn]補(bǔ)+(y1-y0)[x]補(bǔ)}=[x×y]補(bǔ)

7/23/202370(1)參加運(yùn)算的數(shù)均以補(bǔ)碼表示,符號(hào)位參加運(yùn)算且部分積與被乘數(shù)采用雙符號(hào)位。(2)乘數(shù)末位增設(shè)附加位yn+1,且初始yn+1=0。(3)以ynyn+1作為乘法判別位:若ynyn+1=00或11,則前次部分積(初始部分積為0)加0(或不加),然后連同乘數(shù)右移一位。若ynyn+1=01,則前次部分積加[x]補(bǔ),然后連同乘數(shù)右移一位;若ynyn+1=10,則前次部分積加[-x]補(bǔ),然后連同乘數(shù)右移一位。(4)重復(fù)上面第(3)步,共做n+1次,最后一次不移位。補(bǔ)碼一位乘法算法(布斯乘法)7/23/202371補(bǔ)碼一位乘法的操作

7/23/202372例3.12x=-0.1101y=-0.1011用補(bǔ)碼乘法求x×y=?解:[x]補(bǔ)=11.0011,[y]補(bǔ)=1.0101,[-x]補(bǔ)=0.1101共需運(yùn)算4+1=5次注意:運(yùn)算初始時(shí),部分積Z0=0部分積右移時(shí),必須按補(bǔ)碼移位規(guī)則,連同符號(hào)位同時(shí)右移。運(yùn)算n+1次的“n”是指數(shù)值位的長(zhǎng)度。7/23/202373部分積乘數(shù)ynyn+1

說明

00.00001.01010Z0=0,附加位yn+1=0+00.1101∵ynyn+1=10,∴+[-x]補(bǔ);

00.110100.0110110101

部分積與乘數(shù)同時(shí)右移一位;+11.0011∵ynyn+1=01,∴+[x]補(bǔ);

11.100111.1100111010

部分積與乘數(shù)同時(shí)右移一位;+00.1101∵ynyn+1=10,∴+[-x]補(bǔ);

00.100100.0100111101

部分積與乘數(shù)同時(shí)右移一位;+11.0011∵ynyn+1=01,∴+[x]補(bǔ);

11.011111.10111111

10

部分積與乘數(shù)同時(shí)右移一位;+00.1101∵ynyn+1=10,∴+[-x]補(bǔ);

00.10001111

最后一次只運(yùn)算、不移位。7/23/202374共運(yùn)算4+1=5次,得:[x×y]補(bǔ)=0.10001111x×y=+0.10001111補(bǔ)碼一位乘法的算法,乘積的符號(hào)是在運(yùn)算過程中自然形成的,不需要加以特別處理,這是補(bǔ)碼乘法與原碼乘法的重要區(qū)別。7/23/202375補(bǔ)碼一位乘法的硬件實(shí)現(xiàn)邏輯圖7/23/202376A寄存器:存放乘積和部分積高位部分B寄存器:存放被乘數(shù),可以輸出

B和B。C寄存器:存放乘數(shù)和部分積低位部分CR:計(jì)數(shù)器。用于記錄乘法次數(shù)運(yùn)算初始時(shí),CR=0,每進(jìn)行一次運(yùn)算CR+1,當(dāng)計(jì)數(shù)到CR=n+1時(shí),結(jié)束運(yùn)算。由于CR=n時(shí),就將CT清0,所以在n+1次運(yùn)算不再進(jìn)行移位。Af1、Af2:雙符號(hào)位,符號(hào)位和數(shù)值位同時(shí)參加運(yùn)算。CT:乘法控制觸發(fā)器,CT=1,允許發(fā)出移位脈沖,進(jìn)行乘法運(yùn)算CT=0,不允許發(fā)出移位脈沖,停止乘法運(yùn)算Cn和Cn+1:控制電路中是作+[x]補(bǔ)還是+[-x]補(bǔ)。7/23/202377CnCn+1操作01前次部分積加B,然后連同乘數(shù)右移一位10前次部分積加B+1,然后連同乘數(shù)右移一位0011前次部分積加0,然后連同乘數(shù)右移一位7/23/202378補(bǔ)碼一位乘法的流程圖7/23/202379補(bǔ)碼一位乘法的流程圖中,對(duì)寄存器A和C的移位是在對(duì)CR進(jìn)行判斷之后進(jìn)行的,表示在第n+1次運(yùn)算后不進(jìn)行移位。7/23/202380例:x=-1,

y=-1,求[x×y]補(bǔ)。部分積乘數(shù)ynyn+1

說明

00.00001.00000Z0=0,附加位yn+1=0+00.0000∵ynyn+1=00,∴+0;

00.000000.0000010000

部分積與乘數(shù)同時(shí)右移一位;+

00.00000∵ynyn+1=00,∴+0;

00.000000.0000001000

部分積與乘數(shù)同時(shí)右移一位;+00.0000∵ynyn+1=00,∴+0;

00.000000.0000000100

部分積與乘數(shù)同時(shí)右移一位;+00.0000∵ynyn+1=00,∴+0;

00.000000.00000000

10

部分積與乘數(shù)同時(shí)右移一位;+01.0000

∵ynyn+1=10,∴+[-x]補(bǔ);

01.00000000

最后一次只運(yùn)算、不移位。7/23/202381當(dāng)x=-1,

y=-1時(shí),求[x×y]補(bǔ)所得到的結(jié)果為+1,結(jié)果溢出,無意義。因此,(-1)×(-1)是定點(diǎn)小數(shù)補(bǔ)碼乘法中唯一的溢出情況。7/23/202382作業(yè)用補(bǔ)碼一位乘法完成P1323.4(2)(3)7/23/2023833.3.3快速乘法運(yùn)算多位乘法運(yùn)算的控制復(fù)雜性將呈幾何級(jí)數(shù)性的增加,實(shí)際實(shí)現(xiàn)的難度很大。隨著大規(guī)模集成電路技術(shù)的發(fā)展,為提高乘法的運(yùn)算速度,出現(xiàn)了陣列乘法組件。采用陣列乘法組件目的:利用硬件的疊加方法或流水處理的方法來提高乘法運(yùn)算速度。

7/23/2023841.不帶符號(hào)的陣列乘法器設(shè)有兩個(gè)不帶符號(hào)的二進(jìn)制整數(shù):A=a3a2a1a0,B=b3b2b1b0按手算方法有:7/23/202385陣列乘法器的基本思想把大量的加法器單元電路按一定的陣列形式排列起來,直接實(shí)現(xiàn)手算算式的運(yùn)算過程,避免在一位和兩位乘法中所需的大量重復(fù)的相加和移位操作,從而提高乘法運(yùn)算的速度,

7/23/2023864×4位無符號(hào)數(shù)陣列乘法器的邏輯原理圖

7/23/2023872.帶符號(hào)的陣列乘法器帶符號(hào)的陣列乘法器由不帶符號(hào)的陣列乘法器和求補(bǔ)器構(gòu)成。帶符號(hào)陣列乘法器可以實(shí)現(xiàn)原碼乘法,也可以實(shí)現(xiàn)補(bǔ)碼乘法。7/23/202388n×n位帶符號(hào)數(shù)乘法的陣列乘法器的邏輯原理圖

7/23/202389求補(bǔ)器的邏輯結(jié)構(gòu)一個(gè)二進(jìn)制對(duì)2求補(bǔ)器電路的邏輯表達(dá)式為:

ai*=ai⊕ECi-1,0≤i≤n

Ci=ai+Ci-1

其中C-1=0,E:控制信號(hào),控制是否進(jìn)行求補(bǔ)。E=0不進(jìn)行求補(bǔ),ai*=aiE=1進(jìn)行求補(bǔ),ai*=ai⊕ECi-1,可以利用符號(hào)位來作為控制信號(hào)E。7/23/202390設(shè)[a]補(bǔ)=1.a3a2a1a0,由上面公式有:a0*=a0C0=a0a1*=a1⊕C0=

a1⊕

a0C1=a1+C0=a1+a0a2*=a2⊕C1=

a2⊕(

a1+a0)C2=a2+C1=a2+a1+a0a3*=a3⊕(a2+a1+a0)7/23/202391=1&E≥1=1&≥1=1&≥1=1&C-1=04位二進(jìn)制對(duì)2求補(bǔ)器邏輯電路圖C0C1C27/23/202392設(shè)A=an…a1a0是給定的(n+1)位帶符號(hào)的數(shù),進(jìn)行求補(bǔ)的方法就是從數(shù)的最右端a0開始,由右向左,直到找出第一個(gè)“1”。若ai=1,ai以右均為0,則ai以右包括ai自己的每一個(gè)輸入位都保持不變,而ai以左的每一個(gè)輸入位都求反。7/23/202393需要進(jìn)行原碼乘法時(shí),不用算前求補(bǔ)器與算后求補(bǔ)器,直接把兩數(shù)絕對(duì)值送入乘法陣列計(jì)算,得到2n位乘積絕對(duì)值,再根據(jù)異或門輸出值帶入符號(hào),即得到乘積的原碼。需要進(jìn)行補(bǔ)碼乘法時(shí),由兩個(gè)算前求補(bǔ)器先將兩個(gè)補(bǔ)碼數(shù)轉(zhuǎn)換為兩數(shù)絕對(duì)值,再送入不帶符號(hào)的乘法陣列計(jì)算,得到2n位乘積絕對(duì)值。然后根據(jù)異或門輸出值控制算后求補(bǔ)器求補(bǔ),得到2n+1位的補(bǔ)碼形式的乘積。7/23/202394由于陣列乘法器采用重復(fù)設(shè)置大量器件的方法構(gòu)成乘法陣列,避免了乘法運(yùn)算中的重復(fù)相加和移位操作,換取了高速的乘法運(yùn)算速度。而且乘法陣列內(nèi)部結(jié)構(gòu)規(guī)整,便于用超大規(guī)模集成電路實(shí)現(xiàn),使得陣列乘法器得到了廣泛的應(yīng)用。

7/23/2023953.4定點(diǎn)除法運(yùn)算除法運(yùn)算的處理思想與乘法運(yùn)算的處理思想相似,其常規(guī)算法也是轉(zhuǎn)換成若干次“加減—移位”循環(huán)來實(shí)現(xiàn)。由于定點(diǎn)運(yùn)算的結(jié)果不應(yīng)超過機(jī)器的所能表示的數(shù)據(jù)范圍,所以為了不使商產(chǎn)生溢出,在進(jìn)行定點(diǎn)除法時(shí)應(yīng)滿足:對(duì)定點(diǎn)小數(shù)要求:|被除數(shù)|<|除數(shù)|對(duì)定點(diǎn)整數(shù)要求:|被除數(shù)|≥|除數(shù)|7/23/2023963.4.1原碼除法運(yùn)算定點(diǎn)小數(shù)除法運(yùn)算的手算過程。例3.15x=-0.1011,y=0.1101,求x/y。解:商

q=0.1101余數(shù)

r=0.0111×2-47/23/2023971.原碼恢復(fù)余數(shù)法

原碼恢復(fù)余數(shù)法算法:①判溢出,要求|被除數(shù)|<|除數(shù)|;②符號(hào)位單獨(dú)按兩數(shù)符號(hào)的模2相加求得;③被除數(shù)減去除數(shù);④若所得余數(shù)為正,表示夠減,相應(yīng)位上商為1,余數(shù)左移一位(相當(dāng)于除數(shù)右移)減去除數(shù);若所得余數(shù)為負(fù),表示不夠減,相應(yīng)位上商為0,余數(shù)加上除數(shù)(恢復(fù)余數(shù)),再左移一位減去除數(shù);⑤重復(fù)第④步,直到求得所要求的商的各位為止。7/23/202398在原碼除法的運(yùn)算過程中應(yīng)注意的問題:①數(shù)值部分的計(jì)算是對(duì)被除數(shù)和除數(shù)的絕對(duì)值進(jìn)行的;②減去除數(shù)是用+[-|y|]補(bǔ)實(shí)現(xiàn)③為了不使余數(shù)左移時(shí)產(chǎn)生數(shù)值侵犯符號(hào)位的情況,被除數(shù)和除數(shù)采用雙符號(hào)位。④確定余數(shù)時(shí),左移幾次就乘以2的負(fù)幾次冪。余數(shù)與被除數(shù)同號(hào)。7/23/202399例3.16已知x=-0.1011,y=+0.1101,用原碼恢復(fù)余數(shù)法求x/y。

解:[x]原=1.1011,[y]原=0.1101,|x|=00.1011|y|=00.1101[-|y|]補(bǔ)=11.0011商符qf=xf⊕yf=1⊕0=17/23/2023100余數(shù)

上商

說明

00.10110.0000初始余數(shù)為被除數(shù)+

11.0011

減y,即加[-|y|]補(bǔ)

11.11100.0000

余數(shù)為負(fù),上商為0+

00.1101

加y恢復(fù)余數(shù)

00.101101.01100.0000左移一位+

11.0011

減y00.10010.0001

余數(shù)為正,上商為101.00100.0010左移一位+

11.0011

減y00.01010.0011

余數(shù)為正,上商為100.10100.0110左移一位+

11.0011

11.11010.0110

余數(shù)為負(fù),上商為0+

00.1101

加y恢復(fù)余數(shù)

00.101001.01000.0110左移一位+

11.0011

減y00.01110.1101

余數(shù)為正,上商為1,結(jié)束運(yùn)算。7/23/2023101得商的絕對(duì)值為:|q|=|x/y|=0.1101,

余數(shù)的絕對(duì)值為:|r|=0.0111∵商符

qf=1∴商[q]原=[x/y]原=1.1101x/y=-0.1101∵n=4,∴所得的余數(shù)需乘以2-4才是真正的余數(shù),|r|=0.0111×2-4。

余數(shù)

[r]原=1.0111×2-4r=-0.00000111注意:余數(shù)符號(hào)與被除數(shù)符號(hào)相一致。7/23/2023102從例3.16中可以看出,在數(shù)值部分的長(zhǎng)度n=4的除法運(yùn)算中,共上商5次,其中第一次商位于商的整數(shù)部分。對(duì)于定點(diǎn)小數(shù)除法:若該位商為1,則表示|被除數(shù)|>|除數(shù)|,除法溢出,不能繼續(xù)進(jìn)行運(yùn)算;若該位商為0,則表示|被除數(shù)|<|除數(shù)|,除法合法,可以繼續(xù)進(jìn)行運(yùn)算。

7/23/2023103在原碼恢復(fù)余數(shù)法中:余數(shù)為正時(shí),需作余數(shù)左移、相減,共兩步操作;余數(shù)為負(fù)時(shí),需作相加、左移、相減,共三步操作。由于操作步驟的不一致,控制復(fù)雜。且恢復(fù)余數(shù)的過程也降低了除法速度。因此在實(shí)際應(yīng)用中,很少采用恢復(fù)余數(shù)法。7/23/20231042.原碼不恢復(fù)余數(shù)法(加減交替法)在原碼恢復(fù)余數(shù)法的運(yùn)算過程中:當(dāng)余數(shù)ri>0時(shí),執(zhí)行的操作是左移一位→減除數(shù),結(jié)果是2ri-y;當(dāng)余數(shù)ri<0時(shí),執(zhí)行的操作是加除數(shù)(恢復(fù)余數(shù))→左移→減除數(shù),結(jié)果是2(ri+y)-y。變換后得:2(ri+y)-y=2ri+2y-y=2ri+y。將“加除數(shù)(恢復(fù)余數(shù))→左移→減除數(shù)”的操作用“余數(shù)左移→加除數(shù)”的操作來替代,所得結(jié)果是一樣的。這樣做,既節(jié)省了恢復(fù)余數(shù)的時(shí)間,又簡(jiǎn)化了除法控制邏輯。

7/23/2023105原碼不恢復(fù)余數(shù)法算法①判溢出,比較被除數(shù)和除數(shù)。若在定點(diǎn)小數(shù)運(yùn)算時(shí),|被除數(shù)|>|除數(shù)|,則除法將發(fā)生溢出,不能進(jìn)行除法運(yùn)算。②

符號(hào)位單獨(dú)處理,商的符號(hào)由被除數(shù)和除數(shù)符號(hào)的異或運(yùn)算求得。③

用被除數(shù)和除數(shù)的數(shù)值部分進(jìn)行運(yùn)算,被除數(shù)減去除數(shù)。④

若所得余數(shù)為正,表示夠減,相應(yīng)位上商為1,將余數(shù)左移一位后,減去除數(shù);

若所得余數(shù)為負(fù),表示不夠減,相應(yīng)位上商為0,將余數(shù)左移一位后,加上除數(shù)。7/23/2023106⑤

重復(fù)第④步,直到求得所要求的商的各位為止。如果最后一次所得余數(shù)仍為負(fù),則需再做一次加除數(shù)的操作,以得到正確的余數(shù)。因?yàn)檫\(yùn)算時(shí)對(duì)除數(shù)的加減是交替進(jìn)行的,所以原碼不恢復(fù)余數(shù)法也稱為原碼加減交替除法。

7/23/2023107在原碼除法的運(yùn)算過程中應(yīng)注意的問題:①數(shù)值部分的計(jì)算是對(duì)被除數(shù)和除數(shù)的絕對(duì)值進(jìn)行的;②減去除數(shù)是用+[-|y|]補(bǔ)實(shí)現(xiàn)③為了不使余數(shù)左移時(shí)產(chǎn)生數(shù)值侵犯符號(hào)位的情況,被除數(shù)和除數(shù)采用雙符號(hào)位。④確定余數(shù)時(shí),左移幾次就乘以2的負(fù)幾次冪。余數(shù)與被除數(shù)同號(hào)。7/23/2023108例3.17已知x=-0.1011,y=+0.1101,用原碼不恢復(fù)余數(shù)法求x/y。

解:[x]原=1.1011,[y]原=0.1101,|x|=00.1011,|y|=00.1101,[-|y|]補(bǔ)=11.0011,

商符qf=xf⊕yf=1⊕0=17/23/2023109

余數(shù)上商說明

00.10110.0000初始余數(shù)為被除數(shù),初始商為0+11.0011

減y11.11100.0000

余數(shù)為負(fù),上商為011.11000.0000左移一位+00.1101

加y00.10010.0001

余數(shù)為正,上商為101.00100.0010左移一位+11.0011

減y00.01010.0011

余數(shù)為正,上商為100.10100.0110左移一位+11.0011

減y11.11010.0110

余數(shù)為負(fù),上商為011.10100.1100左移一位+00.1101

加y00.01110.1101

余數(shù)為正,上商為17/23/2023110得商:|q|=0.1101,余數(shù)|r|=0.0111[q]原=[x/y]原=1.1101x/y=-0.1101余數(shù):[r]原=1.0111×2-4r=-0.0111×2-47/23/2023111例3.18[x]原=0.10101,[y]原=0.11110,用原碼不恢復(fù)余數(shù)法求x/y。

解:|x|=00.10101|y|=00.11110[-|y|]補(bǔ)=11.00010商符qf=xf⊕yf=0⊕0=07/23/2023112余數(shù)上商說明

00.101010.00000初始余數(shù)為被除數(shù),初始商為0+11.00010

減y11.101110.00000

余數(shù)為負(fù),上商為011.011100.00000左移一位+00.11110

加y00.011000.00001

余數(shù)為正,上商為100.110000.00010左移一位+11.00010

減y11.110100.00010

余數(shù)為負(fù),上商為011.101000.00100左移一位+00.11110

加y00.100100.00101

余數(shù)為正,上商為101.001000.01010左移一位+11.00010

減y00.001100.01011

余數(shù)為正,上商為100.011000.10110左移一位+11.00010

減y11.011100.10110

余數(shù)為負(fù),上商為0+00.11110

最后一步,余數(shù)為負(fù),加y恢復(fù)余數(shù)

00.011007/23/2023113商符qf=xf⊕yf=0⊕0=0得:商:[q]原=[x/y]原=0.10110x/y=0.10110余數(shù):[r]原=0.01100×2-5r=0.0000001100

7/23/2023114原碼不恢復(fù)余數(shù)法的硬件實(shí)現(xiàn)7/23/2023115A寄存器:存放被除數(shù)和余數(shù),最終結(jié)果是余數(shù)。B寄存器:存放除數(shù)。C寄存器:存放被除數(shù)和商,最終結(jié)果是商。運(yùn)算過程中寄存器A、C聯(lián)合左移。商的符號(hào)Cf:Cf=Af⊕Bf運(yùn)算過程中用Ff控制上商。Ff=0,說明余數(shù)r≥0,商1,作-B操作,

即B+1。Ff=1,說明余數(shù)r<0,商0,作+B操作。在實(shí)現(xiàn)定點(diǎn)小數(shù)和定點(diǎn)整數(shù)除法時(shí),寄存器的分配使用略有不同。7/23/2023116為了便于控制上商,將上商的位置固定在C的最低位,并要求在余數(shù)左移的同時(shí),商數(shù)也隨之向左移位,因此要求C寄存器具有左移功能。上商是由加法器的符號(hào)位Ff控制的。Ff=0,表示余數(shù)為正,經(jīng)非門將Ff取反后,在C的最低位上商為1,并控制下次做減法。Ff=1,表示余數(shù)為負(fù),取反后上商為0,并控制下次做加法。

一般A寄存器不具有移位功能,加法器計(jì)算出的余數(shù)可以通過斜送電路斜送到A寄存器中來實(shí)現(xiàn)余數(shù)的左移。

7/23/2023117定點(diǎn)小數(shù)的除法算法也適用于定點(diǎn)整數(shù)的除法運(yùn)算。為了不使商超出定點(diǎn)整數(shù)所能表示的數(shù)據(jù)范圍,要求滿足條件:|除數(shù)|≤|被除數(shù)|。因?yàn)橹挥羞@樣才能得到整數(shù)商,滿足定點(diǎn)整數(shù)的要求。在做整數(shù)除法前,通常先要對(duì)被除數(shù)和除數(shù)進(jìn)行判斷,如果不滿足上述條件,機(jī)器將發(fā)出出錯(cuò)信號(hào)。

7/23/2023118因?yàn)?n位被除數(shù)除以n位除數(shù),可以得到n位的商。在整數(shù)除法中,為了得到n位整數(shù)商,被除數(shù)位數(shù)的長(zhǎng)度應(yīng)該是除數(shù)位數(shù)長(zhǎng)度的兩倍,并且為了使商不超過n位,要求被除數(shù)的高n位比除數(shù)(n位)小,否則商將超過n位,即運(yùn)算結(jié)果溢出。如果被除數(shù)和除數(shù)的位數(shù)都為n位,則應(yīng)在被除數(shù)前面加上n個(gè)0,使被除數(shù)的長(zhǎng)度擴(kuò)展為2n后再進(jìn)行運(yùn)算。在小數(shù)除法中,也可以使被除數(shù)位數(shù)的長(zhǎng)度為除數(shù)位數(shù)長(zhǎng)度的兩倍。在字長(zhǎng)為n的計(jì)算機(jī)中,稱被除數(shù)采用雙字長(zhǎng)、除數(shù)采用單字長(zhǎng)的除法為雙精度除法。相應(yīng)地稱被除數(shù)和除數(shù)均采用單字長(zhǎng)的除法為單精度除法。

7/23/2023119例3.19[x]原=111011,[y]原=000010,用原碼不恢復(fù)余數(shù)法求x/y。解:被除數(shù)x和除數(shù)y的數(shù)值位數(shù)都為5位,

∴在x前面加上5個(gè)0,使其長(zhǎng)度擴(kuò)展2×5=10,|x|=000000011011,|y|=0000010,[-|y|]補(bǔ)=1111110,商符qf=xf⊕yf=1⊕0=17/23/2023120被除數(shù)高位

被除數(shù)低位

上商

說明

0000000110110初始余數(shù)為被除數(shù)+

1111110

減y1111110110110

余數(shù)為負(fù),上商為01111101101100左移一位+

0000010

加y1111111101100

余數(shù)為負(fù),上商為01111111011000左移一位

0000010

加y0000001011001

余數(shù)為正,上商為10000010110010左移一位+

1111110

減y0000000110011

余數(shù)為正,上商為10000001100110左移一位+

1111110

減y1111111100110

余數(shù)為負(fù),上商為01111111001100左移一位+

0000010

加y0000001001101

余數(shù)為正,上商為17/23/2023121商符qf=xf⊕yf=1⊕0=1得:商[q]原=[x/y]原=101101x/y=-1101,余數(shù)[r]原=100001,r=-1

7/23/2023122原碼不恢復(fù)余數(shù)除法寄存器的分配

7/23/2023123作業(yè)P1323.6(2)(3)7/23/20231243.4.2補(bǔ)碼除法運(yùn)算在補(bǔ)碼除法運(yùn)算中,參加運(yùn)算的數(shù)均為補(bǔ)碼數(shù),所得商也是補(bǔ)碼形式,符號(hào)位參加運(yùn)算。7/23/20231251.補(bǔ)碼不恢復(fù)余數(shù)除法進(jìn)行補(bǔ)碼除法運(yùn)算應(yīng)考慮的幾個(gè)問題。1)比較規(guī)則——如何判別是否夠減由于上商是根據(jù)比較被除數(shù)(或余數(shù))與除數(shù)的絕對(duì)值的大小確定的,所以需要解決如何比較兩個(gè)補(bǔ)碼數(shù)的絕對(duì)值的大小,也就是如何判別是否夠減的問題。7/23/2023126①x>0,y>0且|x|>|y|設(shè)x=0.1011,y=0.1001[x]補(bǔ)=0.1011,[y]補(bǔ)=0.1001r=[x]補(bǔ)-[y]補(bǔ)=0.1011+1.0111=0.00100.10111.0111+0.0010夠減余數(shù)與除數(shù)同號(hào)⑴當(dāng)x與y同號(hào)時(shí),作減法[x]補(bǔ)-[y]補(bǔ)進(jìn)行比較。7/23/2023127②x>0,y>0且|x|<|y|設(shè)x=0.1001,y=0.1101[x]補(bǔ)=0.1001,[y]補(bǔ)=0.1101r=[x]補(bǔ)-[y]補(bǔ)=0.1001+1.0011=1.11000.10011.0011+1.1100不夠減余數(shù)與除數(shù)異號(hào)7/23/2023128③x<0,y<0且|x|>|y|設(shè)x=-0.1011,y=-0.0011[x]補(bǔ)=1.0101,[y]補(bǔ)=1.1101r=[x]補(bǔ)-[y]補(bǔ)=1.0101+0.0011=1.10001.01010.0011+1.1000夠減余數(shù)與除數(shù)同號(hào)7/23/2023129④x<0,y<0且|x|<|y|設(shè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論