《微型計算機原理與匯編語言第2章-2補碼的加減運算》由會員分享,可在線閱讀,更多相關(guān)《微型計算機原理與匯編語言第2章-2補碼的加減運算(35頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,第,2,章 計算機中的數(shù)制和編碼,第,2,章 計算機中的數(shù)制和編碼,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,2.2.4,補碼的加減運算,1.,補碼加法,在計算機中,凡是帶符號數(shù)一律用補碼表示,運算結(jié)果自然也是補碼。其運算特點是:符號位和數(shù)值位一起參加運算,并且自動獲得結(jié)果(包括符號位與數(shù)值位)。,補碼加法的運算規(guī)則為:,即:兩數(shù)補碼的和等于兩數(shù)和的補碼。,(2.2.5),例,2.11,已知,+51,補,=0011 0011B,,,+66,補,=0100 001
2、0B,,,-51,補,=1100 1101B,,,-66,補,=1011 1110B,求,+66,補,+51,補,=,?,+66,補,+-51,補,=,?,-66,補,+-51,補,=,?,由于,+66,補,+51,補,=(+66)+(+55),補,=01110101B,結(jié)果為正,因此,(+66)+(+55),原,=(+66)+(+55),補,=01110101B,其真值為,+117,,計算結(jié)果正確。,二進制,(,補碼,),加法 十進制加法,0100 0010 +66,補,+66,+)0011 0011 +51,補,+)+51,0111 0101 +117,補,+117,解:,由于,+66,補
3、,+51,補,=(+66)+(55),補,=0000111B,結(jié)果為正,因此,(+66)+(55),原,=(+66)+(55),補,=00001111,其真值為,+15,,計算結(jié)果正確。,二進制,(,補碼,),加法 十進制加法,0100 0010 +66,補,+66,+)1100 1101 -51,補,+)-51,0000 1111 +15,補,+15,1,自動丟失,由于,-66,補,+-51,補,=10001011B=(-66)+(-55),補,結(jié)果為負,因此,(-66)+(-55),原,=(-66)+(-55),補,補,=11110101B,其真值為,-117,,計算結(jié)果正確。,二進制,(
4、,補碼,),加法 十進制加法,1011 1110 -66,補,-66,+)1100 1101 -51,補,+)-51,1000 1011 -117,補,-117,1,自動丟失,2.,補碼減法,補碼減法的運算規(guī)則為:,變補:連同符號位在內(nèi),各位取反,末位,+1,(2.2.6),即:,例,2.12,已知,+51,補,=0011 0011B,,,+66,補,=0100 0010B,51,補,=1100 1101B,,,66,補,=1011 1110B,求,+66,補,+51,補,=,?,-66,補,-,-,-,51,補,=,?,解,+66,補,-+51,補,=+66,補,+-51,補,-66,補,-
5、51,補,=-66,補,+51,補,二進制,(,補碼,),減法 十進制減法,1011 1110 -66,補,-66,+)0011 0011 +51,補,-)-51,1111 0001 -15,補,-15,二進制,(,補碼,),減法 十進制減法,0100 0010 +66,補,+66,+)1100 1101 -51,補,-)+51,0000 1111 +15,補,+15,1,自動丟失,可以看出,無論被減數(shù)、減數(shù)是正數(shù)還是負數(shù),上述補碼減法的規(guī)則都是正確的。同樣,由最高位向更高位的進位會自動丟失而不影響運算結(jié)果的正確性。,計算機中帶符號數(shù)用補碼表示時有如下優(yōu)點:,可以將減法運算變?yōu)榧臃ㄟ\算,因此可
6、使用同一個運算器實現(xiàn)加法和減法運算,簡化了電路,。,無符號數(shù)和帶符號數(shù)的加法運算可以用同一個加法器實現(xiàn),結(jié)果都是正確的。例如:,無符號數(shù) 帶符號數(shù),11100001 225 -31,補,+)00001101 +)13 +)+13,補,11101110 238 -18,補,若兩操作數(shù)為無符號數(shù)時,計算結(jié)果為無符號數(shù),11101110B,,其真值為,238,,結(jié)果正確;若兩操作數(shù)為補碼形式,計算結(jié)果也為補碼形式,,11101110B,為,18,的補碼,結(jié)果也是正確的。,練習:,1,、,x=+1011010,,,y=+1010000,,求,x+y,補,=,?,2,、,x=-1011010,,,y=-
7、1010000,,求,x+y,補,=,?,3,、,x=+1011010,,,y=-1010000,,求,x-y,補,=,?,4,、,x=-1011010,,,y=+1010000,,求,x-y,補,=,?,2.2.5,溢出及其判斷方法,1.,進位與溢出,所謂,進位,,,是指運算結(jié)果的最高位向更高位的進位,用來判斷無符號數(shù)運算結(jié)果是否超出了計算機所能表示的最大無符號數(shù)的范圍。,溢出,是指帶符號數(shù)的補碼運算溢出,用來判斷帶符號數(shù)補碼運算結(jié)果是否超出了補碼所能表示的范圍。例如,字長為,n,位的帶符號數(shù),它能表示的補碼范圍為,-2,n-1,+2,n-1,-1,,如果運算結(jié)果超出此范圍,就叫補碼溢出,簡
8、稱溢出。,可能出現(xiàn)溢出的情況:,(,1,)兩正數(shù)相加結(jié)果超出范圍,結(jié)果變成負數(shù)。,現(xiàn)象:次高位向最高位有進位,最高位相加(連同次高位進位)無進位。(上溢),(,2,)兩負數(shù)相加結(jié)果超出范圍,結(jié)果變成正數(shù)。,現(xiàn)象:次高位向最高位無進位,最高位相加(連同次高位進位)有進位。(下溢),(,3,)兩異號數(shù)相減,正數(shù)減負數(shù)結(jié)果超出范圍:同(,1,),負數(shù)減正數(shù)結(jié)果超出范圍:同(,2,),2.,溢出的判斷方法,判斷溢出的方法很多,常見的有:,觀察法,。,通過參加運算的兩個數(shù)的符號及運算結(jié)果的符號進行判斷。,單符號位法,。,該方法通過符號位和數(shù)值部分最高位的進位狀態(tài)來判斷結(jié)果是否溢出。,雙符號位法,,,又稱
9、為變形補碼法。它是通過運算結(jié)果的兩個符號位的狀態(tài)來判斷結(jié)果是否溢出。,上述三種方法中,第一種方法僅適用于手工運算時對結(jié)果是否溢出的判斷,其他兩種方法在計算機中都有使用。限于篇幅,本節(jié)僅通過具體例子對第種方法做簡要介紹。,若符號位進位狀態(tài)用,CF,來表示,當符號位向前有進位時,,CF=1,,否則,,CF=0,;數(shù)值部分最高位的進位狀態(tài)用,DF,來表示,當該位向前有進位時,,DF=1,,否則,,DF=0,。單符號位法就是通過該兩位進位狀態(tài)的異或結(jié)果來判斷是否溢出的。,(2.2.7),若,OF=1,,說明結(jié)果溢出;若,OF=0,,則結(jié)果未溢出。也就是說,當符號位和數(shù)值部分最高位同時有進位或同時沒有進
10、位時,結(jié)果沒有溢出,否則,結(jié)果溢出。,例,2.13,設(shè)有兩個操作數(shù),x,=01000100B,,,y,=01001000B,,將這兩個操作數(shù)送運算器做加法運算,試問:若為無符號數(shù),計算結(jié)果是否正確?若為帶符號補碼數(shù),計算結(jié)果是否溢出?,解,無符號數(shù) 帶符號數(shù),01000100 68 +68,補,+)01001000 +)72 +)+72,補,10001100 140 +140,補,DF=1,CF=0,若為無符號數(shù),由于,CF=0,,說明結(jié)果未超出,8,位無符號數(shù)所能表達的數(shù)值范圍,(0,255),,計算結(jié)果,10001100B,為無符號數(shù),其真值為,140,,計算結(jié)果正確。,若為帶符號數(shù)補碼,
11、由于,OF=1,,結(jié)果溢出;這里也可通過參加運算的兩個數(shù)的符號及運算結(jié)果的符號進行判斷,由于兩操作數(shù)均為正數(shù),而結(jié)果卻為負數(shù),因而結(jié)果溢出;,+68,和,+72,兩數(shù)補碼之和應為,+140,的補碼,而,8,位帶符號數(shù)補碼所能表達的數(shù)值范圍為,128,+127,,結(jié)果超出該范圍,因此結(jié)果是錯誤的。,例,2.14,設(shè)有兩個操作數(shù),x,=11101110B,,,y,=11001000B,,將這兩個操作數(shù)送運算器做加法運算,試問:若為無符號數(shù),計算結(jié)果是否正確?若為帶符號補碼數(shù),計算結(jié)果是否溢出?,解,無符號數(shù) 帶符號數(shù),11101110 238 -18,補,+)11001000 +)200 +)-5
12、6,補,10110110 438 -74,補,DF=1,CF=1,1,自動丟失,若為無符號數(shù),由于,CF=1,,說明結(jié)果超出,8,位無符號數(shù)所能表達的數(shù)值范圍,(0,255),。兩操作數(shù),11101110B,和,11001000B,對應的無符號數(shù)分別為,238,和,200,,兩數(shù)之和應為,438255,,因此,計算結(jié)果是錯誤的。,若為帶符號數(shù)補碼,由于,OF=0,,結(jié)果未溢出。兩操作數(shù),11101110B,和,11001000B,分別為,18,和,56,的補碼,其結(jié)果應為,74,的補碼形式,而計算結(jié)果,10110110B,正是,74,的補碼,因此結(jié)果正確。,2.3,信 息 的 編 碼,2.3.
13、1,二進制編碼的十進制數(shù),(BCD,編碼,),雖然二進制數(shù)對計算機來說是最佳的數(shù)制,但是人們卻不習慣使用它。為了解決這一矛盾,人們提出了一個比較適合于十進制系統(tǒng)的二進制編碼的特殊形式,即將,1,位十進制的,0,9,這,10,個數(shù)字分別用,4,位二進制碼的組合來表示,在此基礎(chǔ)上可按位對任意十進制數(shù)進行編碼。這就是二進制編碼的十進制數(shù),簡稱,BCD,碼,(Binary-Coded Decimal),。,4,位二進制數(shù)碼有,16,種組合,(0000,1111),,原則上可任選其中的,10,個來分別代表十進制中,0,9,這,10,個數(shù)字。但為了便于記憶,最常用的是,8421 BCD,碼,這種編碼從,0
14、000,1111,這,16,種組合中選擇前,10,個即,0000,1001,來分別代表十進制數(shù)碼,0,9,,,8,、,4,、,2,、,1,分別是這種編碼從高位到低位每位的權(quán)值。,BCD,碼有兩種形式,即壓縮型,BCD,碼和非壓縮型,BCD,碼。,1,壓縮型,BCD,碼,壓縮型,BCD,碼用一個字節(jié)表示兩位十進制數(shù)。例如,,10000110B,表示十進制數(shù),86,。,2,非壓縮型,BCD,碼,非壓縮型,BCD,碼用一個字節(jié)表示一位十進制數(shù)。高,4,位總是,0000,,低,4,位用,0000,1001,中的一種組合來表示,0,9,中的某一個十進制數(shù)。,表,2.2 8421 BCD,碼部分編碼表,十
15、進制數(shù),壓縮型,BCD,碼,非壓縮型,BCD,碼,1,2,3,9,10,11,19,20,21,00000001,00000010,00000011,00001001,00010000,00010001,00011001,00100000,00100001,00000001,00000010,00000011,00001001,00000001 00000000,00000001 00000001,00000001 00001001,00000010 00000000,00000010 00000001,需要說明的是,雖然,BCD,碼,可以簡化人機聯(lián)系,但它,比純二進制編碼效率低,,對同一個給
16、定的十進制數(shù),用,BCD,碼表示時需要的位數(shù)比用純二進制碼多,而且用,BCD,碼進行運算所花的時間也要更多,計算過程更復雜,因為,BCD,碼是將每個十進制數(shù)用一組,4,位二進制數(shù)來表示,若將這種,BCD,碼送計算機進行運算,由于計算機總是將數(shù)當作二進制數(shù)來運算,所以結(jié)果可能出錯,,因此需要對計算結(jié)果進行必要的,修正,,才能使結(jié)果為正確的,BCD,碼形式。詳見本小節(jié)例,2.17,。,例,2.15,十進制數(shù)與,BCD,數(shù)相互轉(zhuǎn)換。,將十進制數(shù),69.81,轉(zhuǎn)換為壓縮型,BCD,數(shù):,69.81=(0110 1001.1000 0001),BCD,將,BCD,數(shù),1000 1001.0110 1001,轉(zhuǎn)換為十進制數(shù):,(1000 1001.0110 1001),BCD,=89.69,例,2.16,設(shè)有變量,x,等于,10010110B,,當該變量分別為無符號數(shù)、原碼、補碼、壓縮型,BCD,碼時,試分別計算變量,x,所代表的數(shù)值大小。,解:,x,為無符號數(shù),:,x,=10010110B=1,2,7,+0,2,6,+0,2,5,+1,2,4,+0,2,3,+1,2,2,+1,2,1,+0,2,