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

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu)

QY第4章運(yùn)算方法與運(yùn)算器

?定點(diǎn)數(shù)的加減運(yùn)算及實(shí)現(xiàn)

會(huì)定點(diǎn)數(shù)的乘法運(yùn)算及實(shí)現(xiàn)

傘定點(diǎn)數(shù)除法運(yùn)算及實(shí)現(xiàn)」

■定點(diǎn)運(yùn)算器的組成與結(jié)構(gòu)

?浮點(diǎn)運(yùn)算及運(yùn)算器

■浮點(diǎn)運(yùn)算器舉例

BACK

4.1定點(diǎn)數(shù)的加減運(yùn)算及實(shí)現(xiàn)

補(bǔ)碼加減運(yùn)算與運(yùn)算器

機(jī)器數(shù)的移位運(yùn)算

移碼加減運(yùn)算與判溢

U!十進(jìn)制加法運(yùn)算

QY一、?補(bǔ)碼加減運(yùn)算與運(yùn)算器

0補(bǔ)碼加減運(yùn)算方法

6補(bǔ)碼加減運(yùn)算的溢出判斷

補(bǔ)碼加減運(yùn)算器的實(shí)現(xiàn)

、補(bǔ)碼加減運(yùn)算方法

?:?補(bǔ)碼的加減運(yùn)算的公式是:

[X+Y]補(bǔ)=[X]補(bǔ)+[丫]補(bǔ)

[X-Y]補(bǔ)=[X]補(bǔ)+[-丫1補(bǔ)

*華寺點(diǎn):

■雇用補(bǔ)碼進(jìn)行加減運(yùn)算,符號(hào)位和數(shù)值位一樣參

加運(yùn)算。

■補(bǔ)碼的減法可以用加法來(lái)實(shí)現(xiàn),任意兩數(shù)之差的

補(bǔ)碼等于被減數(shù)的補(bǔ)碼與減數(shù)相反數(shù)的補(bǔ)碼之和。

5

6求補(bǔ)運(yùn)算:[Y]補(bǔ)一[一丫]補(bǔ)

?:?求補(bǔ)規(guī)則:將[Y]補(bǔ)包括符號(hào)位在內(nèi)每一位取反,末

位加1。

?:?若[Y]補(bǔ)=YO,Y1……Yn,則:

TO補(bǔ)=丫0丫1……Yn+1

?若[Y]補(bǔ)=YO.Y1...Yn,貝I]:

[-Y]補(bǔ)=Y。Yi……Yn+0.0……01

中例:[X]補(bǔ)=0.1101,則:[-X]#=10011

金[Y]補(bǔ)=1.1101,貝心[一丫]補(bǔ)=0.0011

6

?:?例:已知X=+10W,Y=-0100,用補(bǔ)碼計(jì)算X+Y和X-Y。

■寫(xiě)出補(bǔ)碼:

[X]補(bǔ)=0,1011[Y]^=1,1100

[-丫]補(bǔ)=0,0100

■計(jì)舁:

0,1011091011

+1,1100+0,0100

0,0111091111

[X+Y[b=0,0111[X—Y]補(bǔ)=0,1111

?

2、補(bǔ)碼加減運(yùn)算的溢出判斷

?:?當(dāng)運(yùn)算結(jié)果超出機(jī)器數(shù)的表示范圍時(shí),稱(chēng)為溢出。計(jì)

算機(jī)必須具備檢測(cè)運(yùn)算結(jié)果是否發(fā)生溢出的能力,否

則會(huì)得到錯(cuò)誤的結(jié)果。

?:?對(duì)于加減運(yùn)算,可能發(fā)生溢出的情況:同號(hào)(兩數(shù))

相加,或者異號(hào)(兩數(shù))相減。

?:?確定發(fā)生溢出的情況:

■正數(shù)相加,且結(jié)果符號(hào)位為1;

-負(fù)數(shù)相加,且結(jié)果符號(hào)位為0;

■正數(shù)一負(fù)數(shù),且結(jié)果符號(hào)位為1;

■負(fù)數(shù)一正數(shù),且結(jié)果符號(hào)位為0;

8

常用的判溢方法(補(bǔ)碼加減運(yùn)算)

?:?(1)單符號(hào)位判溢方法2

■當(dāng)最高有效位產(chǎn)生的進(jìn)位和符號(hào)位產(chǎn)生的進(jìn)位不

同時(shí),加減運(yùn)算發(fā)生了溢出。

■V=C1十4

(2)雙符號(hào)位判溢方法

■X和Y采用雙符號(hào)位補(bǔ)碼參加運(yùn)算,正數(shù)的雙符號(hào)

位為00,負(fù)數(shù)的雙符號(hào)位為11;當(dāng)運(yùn)算結(jié)果的兩

位符號(hào)Sf2不同時(shí)(01或10),發(fā)生溢出。

■V=Sf1?Sf2=Xf十丫千十Cf十Sf

■Sf1Sf2=01,則正溢出;Sf1Sf2=10,則負(fù)溢出。

9

雙符號(hào)位判溢方法舉例

?:?例:用補(bǔ)碼計(jì)算X+Y和X-Y

■(1)X=+1000,Y=+1001

■(2)X=-1000,Y=1001

兇補(bǔ)00,1000兇補(bǔ)00,1000

+[Y]補(bǔ)00,1001+[?Y]補(bǔ)11,0111

[X+Y]補(bǔ)01,0001[X-YJ411,1111

=

SfiSf2015JE■溢出Sf1Sf2=11?無(wú)溢出

兇補(bǔ)11,1000pq補(bǔ)11,iooo

?[Y]補(bǔ)00,1001+[?Y]補(bǔ)11,0111

[X+Y]補(bǔ)00,0001[X-Y]#10,1111

負(fù)溢出

Sf1Sf2=00,無(wú)溢出Sf1Sf2=10,

10

3、補(bǔ)碼加減運(yùn)算器

3、補(bǔ)碼加減運(yùn)算器的實(shí)現(xiàn)

?:?核心部件:一個(gè)普通的二進(jìn)制并行加法器。

?A:累加器,存放[X]補(bǔ);B:寄存器,存放[Y]補(bǔ);

?:?取反電路:

*3,SUB=。時(shí),補(bǔ)碼加法器,將B寄存器直接送入并

行加法器;_

*■/SUB=1時(shí),補(bǔ)碼減法器,4匏送入并行加法器,

同時(shí),并行加法器的最低位產(chǎn)生進(jìn)位,即B取反加1,

此時(shí)并行加法器的運(yùn)算相當(dāng)于[A]補(bǔ)力口[-B]補(bǔ),完成減

法運(yùn)算。

12

、機(jī)器數(shù)的移位運(yùn)算

?:?二進(jìn)制數(shù)據(jù)(真值)每相對(duì)于小數(shù)點(diǎn)左移一位,相當(dāng)

于乘以2;每相對(duì)于小數(shù)點(diǎn)右移一位,相當(dāng)于除以2。

?:?計(jì)算機(jī)中的移位運(yùn)算分為:

?1、邏輯移位:將移位的數(shù)據(jù)視為無(wú)符號(hào)數(shù)據(jù),各

數(shù)據(jù)位在位置上發(fā)生了變化,導(dǎo)致無(wú)符號(hào)數(shù)據(jù)的數(shù)

值(無(wú)正負(fù))放大或縮小。

■2、算術(shù)移位:將移位的數(shù)據(jù)視為帶符號(hào)數(shù)據(jù)(機(jī)

器數(shù))。算術(shù)移位的結(jié)果,在數(shù)值的絕對(duì)值上進(jìn)行

放大或縮小,同時(shí),符號(hào)位必須要保持不變。

■3、循環(huán)移位:所有的數(shù)據(jù)位在自身范圍內(nèi)進(jìn)行左

移或者右移,左移時(shí)最高位移入最低位,右移時(shí)最

低位移入最高位。

13

QY補(bǔ)碼的算術(shù)移位

?:?算術(shù)左移:符號(hào)位不變,高位移出,低位補(bǔ)0。

■為保證補(bǔ)碼算術(shù)左移時(shí)不發(fā)生溢出,移位的數(shù)據(jù)

最高有效位必須與符號(hào)位相同。

■在不發(fā)生溢出的前提下,用硬件實(shí)現(xiàn)補(bǔ)碼的算術(shù)

左移時(shí),直接將數(shù)據(jù)最高有效位移入符號(hào)位,不

會(huì)改變機(jī)器數(shù)的符號(hào)。

?:?算術(shù)右移:符號(hào)位不變,低位移出,高位正數(shù)補(bǔ)0,

負(fù)數(shù)補(bǔ)1,即高位補(bǔ)符號(hào)位。

符號(hào)位

fXf-----?X1X2--------?Xn----?

符號(hào)位

QY補(bǔ)碼的算術(shù)移位舉例

?:?例:設(shè)X=0.1001,丫=—0.0101,求

■伏]補(bǔ)=0.1001

■[2x1補(bǔ)=1.0010(溢出)

■[X/21補(bǔ)=0.0100

■[丫]補(bǔ)=1.1011

[2丫1補(bǔ)=1.0110

■[Y/2]補(bǔ)=LUOI

?

QY三、移碼加減運(yùn)算與判溢

篇碼和盜碼葉管

n

[X]移+[¥]移=2葉X+2+Y=2葉(2n+X+Y)=2n+[X+Y]移

n

[X]移+[-Y]移=2+[X—Y]移[X-Y]移=[X]移+[一Y]抖(mod2前)

?:?移碼和補(bǔ)碼混合計(jì)算

nn+1

[X]移+[Y]科=2葉X+”+i+Y="*+(2+X+Y)=2n+】+[X+Y]移=[X+Y]移(mod2)

n+1

[X-Y]移=[耳夠+[—Y]科(mod2)

?:?移碼運(yùn)算結(jié)果判溢:

0XfXix2.......xn

+YfYfYi丫2……Yn

SfiSf2Sis2……sn

16

移碼加減運(yùn)算與判溢

移碼運(yùn)算結(jié)果溢出的判斷條件是:

■當(dāng)結(jié)果的最高符號(hào)位Sf1二1時(shí)溢出,Sf1=0時(shí)結(jié)果

正確。

?Sf1Sf2=10時(shí),結(jié)果正溢出;

?Sf1Sf2=W時(shí),結(jié)果負(fù)溢出。

■由于移碼運(yùn)算用于浮點(diǎn)數(shù)的階碼,當(dāng)運(yùn)算結(jié)果正

溢出時(shí),浮點(diǎn)數(shù)上溢;當(dāng)運(yùn)算結(jié)果負(fù)溢出時(shí),浮

點(diǎn)數(shù)下溢,當(dāng)作機(jī)器零處理。

17

四、十進(jìn)制加法運(yùn)算

?:?計(jì)算機(jī)中的十進(jìn)制加法器通常采用BCD碼設(shè)計(jì),在二

進(jìn)制加法器的基礎(chǔ)上,加上適當(dāng)?shù)男U娐?,可以?shí)

現(xiàn)BCD碼的加法器。

?:?對(duì)于8421BCD碼來(lái)說(shuō),當(dāng)相加的兩數(shù)之和S>9時(shí),力口6

校正;當(dāng)SW9時(shí),且無(wú)進(jìn)位時(shí),結(jié)果正確,不需校正。

18

4.2定點(diǎn)數(shù)的乘法運(yùn)算及實(shí)現(xiàn)

原碼乘法及實(shí)現(xiàn)

補(bǔ)碼乘法及實(shí)現(xiàn)

陣列乘法器

一、原碼乘法及實(shí)現(xiàn)

?:?由于計(jì)算機(jī)的軟硬件在邏輯上具有一定的等價(jià)性,因

此實(shí)現(xiàn)乘除法運(yùn)算,可以有三種方式:

?I.用軟件實(shí)現(xiàn)。

■硬件上:設(shè)計(jì)簡(jiǎn)單,沒(méi)有乘法器和除法器。

■指令系統(tǒng):沒(méi)有乘除指令,但有加/減法和移位指

■實(shí)現(xiàn):乘除運(yùn)算通過(guò)編制一段子程序來(lái)實(shí)現(xiàn)

■算法:程序中運(yùn)用串行乘除運(yùn)算算法,循環(huán)累加、

右移指令一乘法,循環(huán)減、左移指令一除法。

■運(yùn)算速度:較慢。

■適用場(chǎng)合:?jiǎn)纹瑱C(jī)。

20

一、原碼乘法及實(shí)現(xiàn)

on.用硬件乘法器和除法器實(shí)現(xiàn)。

■硬件上:設(shè)置有并行加法器、移位器和若干循環(huán)、

計(jì)數(shù)控制邏輯電路搭成的串行乘除法器。

■指令系統(tǒng):具有乘除法指令。

■實(shí)現(xiàn):乘除運(yùn)算通過(guò)微程序一級(jí)(硬件+微程序)

來(lái)實(shí)現(xiàn)。

■算法:在微程序中依據(jù)串行乘除運(yùn)算算法,循環(huán)累

力口、右移指令一乘法,循環(huán)減、左移指令一除法。

■運(yùn)算速度:有所提高,但硬件設(shè)計(jì)也相對(duì)復(fù)雜。

■適用場(chǎng)合:低性能CPU。

21

一、原碼乘法及實(shí)現(xiàn)

?III.用高速的陣列乘法器和陣列除法器來(lái)實(shí)現(xiàn)。

■硬件上:設(shè)置有專(zhuān)用的、并行運(yùn)算的陣列乘法器和

陣列除法器。

■指令系統(tǒng):具有乘除法指令。

■實(shí)現(xiàn):完全通過(guò)硬件來(lái)實(shí)現(xiàn)。

■算法:并行乘/除法。

■運(yùn)算速度:很快,但硬件設(shè)計(jì)相當(dāng)復(fù)雜。

■適用場(chǎng)合:高性能CPU。

22

原碼乘法及實(shí)現(xiàn)

*1、手工乘法算法

■手工計(jì)算1011X1101,步驟:1011

■手工算法:對(duì)應(yīng)每1位乘數(shù)求得1項(xiàng)位

積,并將位積逐位左移,然后將所有X1101

的位積一次相加,得到最后的乘積。~~WH

■乘法的機(jī)器算法:從乘數(shù)的最低位開(kāi)

始,每次根據(jù)乘數(shù)位得到其位積,乘0000

數(shù)位為0,位積為0,乘數(shù)位為1,則

位積為被乘數(shù);用原部分積右移1位1011

加上本次位積,得新部分積;初始部

分積為0。1011

10001111

23

QY二、原碼乘法算法

?:*2、原碼一位乘法算法:

假設(shè)[X]原=XsX1X2.......Xn,[Y]原二YsY1

Y2……Yn,P=X-Y,Ps是積的符號(hào):

■符號(hào)位單獨(dú)處理ps=Xs十Ys

?絕對(duì)值進(jìn)行數(shù)值運(yùn)算|P|二|X|*|Y|

?:?例如:X=+1011,Y=-1101,用原碼一位乘法計(jì)算

P=X'YO

QY舉例

部分積乘數(shù)Y操作說(shuō)明

■[X]原二0,1011O,000011O1

?[Y]原=1,1101

+O,1011V4=l,+IX|

■Ps二Xs十Ys

O,1011

=0?1=1

右移—位

■|P|二|X|-|Y|O,0101111O

十O,0000V3=0,+0

O,0101

O,OO1O1111右移一位

+0,1011Y2=l,+|x|

O,1101

[P]原=L10001111

O,01101111右移—位

+0,1011V1=1,+Ix|

0001

0,1000右移一位

QH—、原碼乘法及實(shí)現(xiàn)

3、原碼乘法的硬件實(shí)現(xiàn)

000001101

27

gY第一次求部分積加運(yùn)算:+兇000001101

010111101

28

000001101

01011E1101

001011110

29

000001101

010111101

001011110

001011110

30

01011

01011

01011

01011

符號(hào)位異或

01011結(jié)果為:1,1000111

開(kāi)始

原碼一位乘法流程

結(jié)束

36

補(bǔ)碼乘法及實(shí)現(xiàn)

1、補(bǔ)碼乘法算法

(1)補(bǔ)碼一位乘法——校正法

假設(shè)[X]補(bǔ)=Xo.X1,

[丫]補(bǔ)=丫。4……I,

則有:

[X?Y]補(bǔ)二[知補(bǔ)?(0.Y1……YQ+Y°?[—X]補(bǔ)

37

補(bǔ)碼乘法及實(shí)現(xiàn)

證明如下:

■當(dāng)被乘數(shù)X的符號(hào)任意,Y為正數(shù)時(shí):

根據(jù)補(bǔ)碼定義有:

[X]補(bǔ)=2+X=2n+1+X(mod2)

[Y]補(bǔ)二Y

則:

[X]補(bǔ)?[Y]補(bǔ)=(2田+X)-Y=2田?丫+X-Y

=2n+i?(0.丫1.......Yn)+X?Y

=2-(丫1.......Yn)+X?Y=2+X-Y(mod2)

=[X?Y]補(bǔ)

即:Y>0時(shí),[X?Y]補(bǔ)二[X]補(bǔ)?[Y]補(bǔ)

二兇補(bǔ)?”……Yn)

38

補(bǔ)碼乘法及實(shí)現(xiàn)

■當(dāng)被乘數(shù)X的符號(hào)任意,Y為負(fù)數(shù)時(shí):

[Y]補(bǔ)=2+Y=1.丫1……Y”則:

丫=[Y]補(bǔ)一2=0.Y1……Yn-1

[X?Y]補(bǔ)二[X。丫1?????,Yn-X]補(bǔ)

=[X”……Yn]補(bǔ)+[-X]補(bǔ)

因?yàn)?.丫1......Yn>0,所以:

[X”……Yn]補(bǔ)=[X]補(bǔ)?”……Yn)

所以:Y<0時(shí),

[X?Y]補(bǔ)二兇補(bǔ)?(0.1?????.Yn)+[—X]補(bǔ)

39

Q<二、補(bǔ)碼乘法及實(shí)現(xiàn)

例如:X=+0.1011,Y=-0.1101,用補(bǔ)碼一位乘法的校正法計(jì)算P二XV。

[X]補(bǔ)=00.1011[Y]^1=11.0011[-X]^1=11.0101

部分積乘數(shù)Y操作說(shuō)明

00.00000011

+00.1011Y4=l,+[X]補(bǔ)

00.1011

00.01011001_右移一位

+00.1011Y3=l,+[X]補(bǔ)

01.0000

00.10000100右移一,位

+00.0000Y2=0,+0[X-Y]^=1.01110001

00.1000

00.01000010右移一位X-Y=-0.10001111

+00.0000Yi=O,+0

00.0100

00.00100001右移一位

+11.0101Vo=i,+[—X]補(bǔ)校lE

11.01110001

例:設(shè)X=—0.1101,Y二一0.1011,即:兇補(bǔ)二11.0011,[Y]補(bǔ)=11.0101,求[X*Y]補(bǔ)

部分積乘數(shù)說(shuō)明

00.00000101初始值

+[X]補(bǔ)11.0011+[X]補(bǔ)

11.0011—

右移一位11.1001]C1o右移—M立

+000.0000+0

11.1001—

右移一位1L1100]01右移—位

+[X]補(bǔ)11.0011+DG補(bǔ)

10.1111

右移一位11.0111111o右移--位

+000.0000+0

11.0111

右移一位

右移一位11.101111111

+「—X〕補(bǔ)00.1I01+[-X]補(bǔ)

00.10001111

計(jì)算結(jié)果:[X*Y]補(bǔ)=0.10001111

補(bǔ)碼乘法及實(shí)現(xiàn)

?(2)補(bǔ)碼一位乘法----Booth算法

做出如下推導(dǎo):

[X?Y]補(bǔ)二蟲(chóng)]補(bǔ)?(O.Yi……Yn)+Y°?[—X]補(bǔ)

=兇補(bǔ)?(丫/2一1+丫2?2-2++Y/2-n-Yo)

=[X]補(bǔ)?[Y/(2°-2-1)+Y2-(2-1-2-2)+.......+Yn-(2一村-

2-n)-Y0-20]

二補(bǔ)?[丫。-丫12n+1

[X]*p|1I?21I?2-1+YZ./2--Yz_/2-+.......+Yr'i2--Yr-i2-

n-Y0'20]

二兇補(bǔ)?[(丫廠丫。)?20+(Y2-丫1)?2-1+(Y3-Y2)?2一2+……+

(Yn-YQ51-YQ]

二[X]補(bǔ)?[(丫廣丫。)?2。+(Y2-YP?2-1+(Y3-丫2)?2一2+……+

(丫廣丫田)-2一,十(丫叼-Yn)-2-],0

-12n

=兇補(bǔ)?(a0-2°+a/2+a2-2^千二…++an-2-)

其中,將乘數(shù)Y的補(bǔ)碼在最末位添加一位附加位丫.

(初始為0),aLYj+「Yj,i=0,1,…??.,n-1,n。.

42

Booth算法的運(yùn)算規(guī)則

假設(shè)[Y]補(bǔ)=Y0,Y1……Yn

①被乘數(shù)X和乘數(shù)Y均以補(bǔ)碼的形式參加乘法運(yùn)算,運(yùn)算

的結(jié)果是積的補(bǔ)碼。

②部分積和被乘數(shù)X采用雙符號(hào)位,乘數(shù)丫采用單符號(hào)位。

③初始部分積為0;運(yùn)算前,在乘數(shù)丫的補(bǔ)碼末位后添加

一位附加位Yn+1,初始為0。

④根據(jù)YnYn+1的值,按照表4.3進(jìn)行累加右移操作,右移

時(shí)遵循補(bǔ)碼的移位規(guī)則。

⑤累加n+1次,右移n次,即最后一次不右移。

|表43補(bǔ)碼乘法的Booth算法操作表

*操作,

0-lj.+0,右移一位,,

1+[閩斗,右移一位2

b山+[-X]中右移一位,

1-1+0?右移一位c

43

例如:X=+0.1011,Y=-0.1101,用補(bǔ)碼一位乘法的Booth算法計(jì)算P二XV。

解:[X]補(bǔ)=00.1011[Y]^=11.0011[-X]^=11.0101

部分積乘數(shù)Y(丫口丫…)操作說(shuō)叨

00.00001.0011_0

+

11.0101Y4Y5=10,+[—X]補(bǔ)

11.0101

11.101011.0011右移一位

[X-Y]補(bǔ)=1.01110001

十00.0000Y3Y4=11,+0

11.1010

X-Y=-0.10001111

11.1101011.001右移一位

十00.1011丫2丫3=。1.+[X]補(bǔ)

00.1000

00.0100001100右移一位

+00.0000

YiV2=00,-+-0

00.0100

00.0010D0011,0右移一位

4-11.0101Y°Y『10,+E-x]補(bǔ)

11.01110001

二、補(bǔ)碼乘法及實(shí)現(xiàn)

2、補(bǔ)碼乘法的硬件實(shí)現(xiàn)

46

陣列乘法器

孝原理類(lèi)似于二進(jìn)制手工算法

■位積的每一位XiYj都可以用一個(gè)與門(mén)實(shí)現(xiàn),而每

位的相加均可以使用一個(gè)全加器來(lái)實(shí)現(xiàn)。

XXXX

1234

XYYYY

1234_______

XYXYXYXY

14243444

XYXYXYXY

13233343

XYXYXYXY

12223242

+XYXYXYXY

11213141

PPPPPPPP

12345678

47

絕對(duì)值陣列乘法器

48

補(bǔ)碼陣列乘法器

補(bǔ)碼求絕對(duì)值電路

先通過(guò)一個(gè)補(bǔ)碼求絕對(duì)值的邏輯電路變?yōu)榻^對(duì)值后,

送入絕對(duì)值陣列乘法器,運(yùn)算得到積的絕對(duì)值,然后

再通過(guò)一個(gè)絕對(duì)值求補(bǔ)碼的邏輯電路,根據(jù)積的符號(hào)

求出積的補(bǔ)碼形式。

49

補(bǔ)碼陣列乘法器

50

4.3定點(diǎn)數(shù)除法運(yùn)算及實(shí)現(xiàn)

原碼除法及實(shí)現(xiàn)

補(bǔ)碼除法及實(shí)現(xiàn)

陣列除法器

QH—、原碼除法及實(shí)現(xiàn)

1、原碼除法算法

?:?(D手工除法算法0.1101

■改進(jìn)手工算法即可適合機(jī)器運(yùn)算:0.1101]0,10110

■計(jì)算機(jī)通過(guò)做減法測(cè)試來(lái)實(shí)現(xiàn)1101

判斷:結(jié)果大于等于表明夠

0,10010

減,曲1;結(jié)果小于0,表明不

夠減,商0。1101

■計(jì)算機(jī)將余數(shù)左移一位,再直10100

接與不右移的除數(shù)相減。1101

X=+0.1011,Y=-0.11010111

X+Y

52

一、原碼除法及實(shí)現(xiàn)

?(2)原碼恢復(fù)余數(shù)算法

假設(shè)[X]原=Xs.X1X2.......Xn,[丫]原二丫$.丫1

Y2.......Yn,Q是X+Y的同,Qs是陶的符號(hào),R是

X小丫的余數(shù),Rs是余數(shù)的符號(hào)

■原碼除法運(yùn)算的規(guī)則是:

?1.Qs-Xs?Ys,Rs-Xs,|Q|-

|X|+|Y|-|R|+|Y|

?2.余數(shù)和被除數(shù)、除數(shù)均采用雙符號(hào)位;初

始余數(shù)為|X|。

53

一、原碼除法及實(shí)現(xiàn)

■原碼除法運(yùn)算的規(guī)則是:

?3.每次用余數(shù)減去|Y|(通過(guò)加上[-|丫|]補(bǔ)來(lái)

實(shí)現(xiàn)),若結(jié)果的符號(hào)位為0,則夠減,上商

1,余數(shù)左移一位;若結(jié)果的符號(hào)位為1,則

不夠減,上商0,先加|丫卜1灰復(fù)余數(shù),然后余

數(shù)左移一位。

?4.循環(huán)操作步驟3,共做n+1次,最后一次不

左移,但若最后一次上商0,則必須+|丫卜詼復(fù)

余數(shù);若為定點(diǎn)小數(shù)除法,余數(shù)則為最后計(jì)

算得到的余數(shù)右移n位的值。

54

被除數(shù)/余數(shù)商Q操作說(shuō)明

±1

00.10110000

+11.0011+[-IY|]補(bǔ)

例如:X=+0.1011,11.101100000R0<0,上商。

Y=-0.1101+00.1101+1Y|恢復(fù)余數(shù)

用原碼恢復(fù)余數(shù)算法計(jì)算00.1011

X+Y。

01.011O00000左移一位

解:[X]原=0.10。

+11.0011+[-IY|]補(bǔ)

1101

00.100100001_Ri>0,上商1

|X|=0.1011|Y|=0.1101

01.001000010左移一位

[-[丫|]補(bǔ)=11.0011

+11.0011+Y門(mén)補(bǔ)

G)S=Xg十丫s=Rg二0

00.010100011_R2>0,上商1

00.101000110—4立

得[Q]原=11101+11.0011+[-1Y]]補(bǔ)

11.110100110R<o,上商0

[R]原=0.000001113

+00.1101+1V|恢復(fù)余數(shù)

00.1010

01.010001100-4爻

+11.0011+[―IY門(mén)補(bǔ)

01101

00.0111R4>0,上商1

一、原碼除法及實(shí)現(xiàn)

?:?(3)原碼不恢復(fù)余數(shù)算法

-又稱(chēng)為加減交替法:當(dāng)某一次求得的差值(余

數(shù)%)為負(fù)時(shí),不是恢復(fù)它,而是繼續(xù)求下一位

商,但用加上除數(shù)(+|丫|)的辦法來(lái)取代

(-|Y|)操作,其他操作不變。

■其原理證明如下:

?在恢復(fù)余數(shù)除法中,若第iT次求商的余數(shù)

為RT,下一次求商的余數(shù)為用,貝八

R=2R.一|Y|

?如巢R/0,商的第i位上1,并執(zhí)行操作:

余數(shù)左移一位,再減|丫|,得以+1,貝%

Ri+1=2R-|Y|

56

一、原碼除法及實(shí)現(xiàn)

■如果RRO,商的第i位上0,并執(zhí)行操作:恢

復(fù)余數(shù)(+1丫|),將余數(shù)左移一位,再減|丫|,

得其過(guò)程可用公式表示如下:

Ri+1=2(&+|Y|)-|Y|=2Ri+2|Y|-|Y>2Ri+|Y|

■加減交替法的規(guī)則如下:

?余數(shù)為正時(shí),商上1,求下一位商的辦法,是

余數(shù)左移一位,再減去除數(shù);

?當(dāng)余數(shù)為負(fù)時(shí),商上0,求下一位商的辦法,

是余數(shù)左移一位,再加上除數(shù)。

?若最后一次上商為0,而又需得到正確余數(shù),

則在這最后一次仍需恢復(fù)余數(shù)。

57

被除數(shù)/余數(shù)商Q操作說(shuō)明

00.10110000

例如:X=+0.1011,

Y=-0.1101,用原碼不+11.0011+[-1Y]]補(bǔ)

恢復(fù)余數(shù)算法計(jì)算11.111000000R0<0,上商。

X+Y。11.110000000左—Y立

解:原

[X]=0.1011+00.1101+1Y|

[Y]原=1.1101

00.10010000工Ri>0,上商1

|X|=0,1011

|Y|=0.110101.001000010左—Y立

[-|Y|]補(bǔ)=11.0011+11.0011+[-1Y□補(bǔ)

00.01010001

Qs二Xs十Ys-11R2>0,上商1

RS二000.101000110左移一位

+11.0011+[-1Y]]補(bǔ)

11.110100110R3<O,上商。

[Q]原=1.1101

11.101001100左移一位

[R]原=0.00000111+00.1101+1Y|

00.011101101R4>0,上商1

QY—、原碼除法及實(shí)現(xiàn)

*2、原碼除法的硬件實(shí)現(xiàn)

A<|X|/余數(shù))Q(商IQI)Qn

7\

左移一位

緩沖骷

z\

QQ

Bi

計(jì)數(shù)器<斜>

并行加法器(n+2位)

=0

控制電路邏輯

7\7\n_n_n_

控制邏相:<>DIV

t

B(除數(shù)|Y|)

QY—、原碼除法及實(shí)現(xiàn)

原碼不恢復(fù)余數(shù)除法流程

計(jì)數(shù)器減1

補(bǔ)碼除法及實(shí)現(xiàn)

1、補(bǔ)碼除法算法

補(bǔ)碼不恢復(fù)余數(shù)除法的規(guī)則。假設(shè)[X]補(bǔ)=XS.X1

X2...Xn,[Y]補(bǔ)=YS.Y1Y2...Yn,Q是X+Y的

商,R是余數(shù),則補(bǔ)碼除法運(yùn)算的規(guī)則是:

①X和Y以補(bǔ)碼形式參加除法運(yùn)算,商也以補(bǔ)碼的形

式產(chǎn)生。余數(shù)和被除數(shù)、除數(shù)均采用雙符號(hào)位。

②當(dāng)[X]補(bǔ)與[Y]補(bǔ)同號(hào)時(shí),第一次做兇補(bǔ)+[-丫]補(bǔ)操作,

當(dāng)異號(hào)時(shí),第一次做[X]補(bǔ)+[Y]補(bǔ)操作,得到第一

次的部分余數(shù)[R0]補(bǔ)。

61

補(bǔ)碼除法及實(shí)現(xiàn)

補(bǔ)碼除法運(yùn)算的規(guī)則是:

③當(dāng)[Ri]補(bǔ)與[丫]補(bǔ)同號(hào)時(shí),上商1,然后余數(shù)先左移

一位,珈[-丫];、得到新余數(shù)[Ri+口補(bǔ);當(dāng)[Ri]補(bǔ)與

[Y]補(bǔ)異號(hào)時(shí),上商0,余數(shù)左移T立,力口[丫"卜得

到新余數(shù)[Ri+1]補(bǔ)。

④循環(huán)操作步驟③,共做n次,得到1位商符和(n-

1)位商的補(bǔ)碼數(shù)值位,最末位桌用恒置“1”法。

表4.4補(bǔ)碼除法的運(yùn)算操作表

上商

[X]與[Y]商符第一次操作[K]與[Y]下一步操作

真值補(bǔ)碼

減法同號(hào)(夠減)11余數(shù)左移一位,+[-Y]

同號(hào)0

[X]+[-¥]異號(hào)(不夠減)00余數(shù)左移一位,+[Y]

加法同號(hào)(不夠減)01余數(shù)左移一位,+[-Y]

異號(hào)1

[X]+[¥]異號(hào)(夠減)10余數(shù)左移一位,+[Y]

62

補(bǔ)碼除法及實(shí)現(xiàn)

第二種方法的運(yùn)算規(guī)則為:

①X和Y以補(bǔ)碼形式參加除法運(yùn)算,商也以補(bǔ)碼的形

式產(chǎn)生。余數(shù)和被除數(shù)、除數(shù)均采用雙符號(hào)位。

部分余數(shù)初始為[X]補(bǔ),即[R。]補(bǔ)=[X]補(bǔ)。

②當(dāng)[Ri]補(bǔ)與[丫]補(bǔ)同號(hào)時(shí),上商1,然后余數(shù)先左移

一位,加[-丫]補(bǔ)得到新余數(shù)[Ri+口補(bǔ);當(dāng)[Ri]補(bǔ)與

[Y]補(bǔ)異號(hào)時(shí),上商0,余數(shù)左移一位,加[-丫]補(bǔ)得

到新余數(shù)[Ri+1]補(bǔ)。

③循環(huán)操作步驟②,共做n次,得到1位商符和(n-1

位商的補(bǔ)碼數(shù)值位,最末位采用恒置“1”法。

63

補(bǔ)碼除法及實(shí)現(xiàn)

X=+0.1011,Y=-0.1101,用補(bǔ)碼不恢復(fù)余數(shù)算法計(jì)算

X4-Yo

兇補(bǔ)二00.1011[丫]補(bǔ)二.0011[-Y],,=00.1101

第一種方法

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論