數(shù)的機器碼表示,數(shù)的機器碼表示原理圖解
數(shù)的機器碼表示,數(shù)的機器碼表示原理圖解
在計算機中對數(shù)據(jù)進行運算操作時,符號位如何表示呢?是否也同數(shù)值位一道參加運算操作呢?為了妥善的處理好這些問題,就產(chǎn)生了把符號位和數(shù)字位一起編碼來表示相應的數(shù)的各種表示方法,如原碼、補碼、反碼、移碼等。為了區(qū)別一般書寫表示的數(shù)和機器中這些編碼表示的數(shù),通常將前者稱為真值,后者稱為機器數(shù)或機器碼。
1.原碼表示法
若定點小數(shù)的原碼形式為x0x1x2…xn,則原碼表示的定義是
? (2.7)
式中[x]原是機器數(shù),x是真值
例如,x=+0.1001,則[x]原=0.1001
x=-0.1001,則[x]原=1.1001
對于0,原碼機器中往往有“+0”、“-0”之分,故有兩種形式:
[+0]原=0.000...0
[-0]原=1.000...0
若定點整數(shù)的原碼形式為x0x1x2…xn,則原碼表示的定義是
? (2.8)
采用原碼表示法簡單易懂,但它的最大缺點是加法運算復雜。這是因為,當兩數(shù)相加時,如果是同號則數(shù)值相加;如果是異號,則要進行減法。而在進行減法時還要比較絕對值的大小,然后大數(shù)減去小數(shù),最后還要給結(jié)果選擇符號。為了解決這些矛盾,人們找到了補碼表示法。
2.補碼表示法
我們先以鐘表對時為例說明補碼的概念。假設現(xiàn)在的標準時間為4點正; 而有一只表已經(jīng)7點了,為了校準時間,可以采用兩種方法:一是將時針退 7-4=3 格;一是將時針向前撥12-3=9格。這兩種方法都能對準到4點,由此可以看出,減3和加9是等價的,就是說9是(-3)對12的補碼,可以用數(shù)學公式表示
-3=+9(mod12)
mod12的意思就是12模數(shù),這個“?!北硎颈粊G掉的數(shù)值。上式在數(shù)學上稱為同余式。
上例中其所以7-3和7+9(mod12)等價,原因就是表指針超過12時,將12自動丟掉,最后得到16-12=4。從這里可以得到一個啟示,就是負數(shù)用補碼表示時,可以把減法轉(zhuǎn)化為加法。這樣,在計算機中實現(xiàn)起來就比較方便。
若定點小數(shù)補碼形式為x0.x1x2…xn,則補碼表示的定義是
? (2.9)
例如,x=+0.1011,則[x]補=0.1011
x=-0.1011,則[x]補=10+x=10.0000-0.1011=1.0101
對于0,[+0]補=[-0]補=0.0000??????????????? (mod 2)
注意,0的補碼表示只有一種形式。
采用補碼表示法進行減法運算就比原碼方便得多了。因為不論數(shù)是正還是負,機器總是做加法,減法運算可變?yōu)榧臃ㄟ\算。但根據(jù)補碼定義,求負數(shù)的補碼要從2減去|x|。為了用加法代替減法,結(jié)果還得在求補碼時作一次減法,這顯然是不方便的。下面介紹的反碼表示法可以解決負數(shù)的求補問題。
對定點整數(shù),補碼表示的定義是
? (2.10)
?3.反碼表示法
所謂反碼,就是二進制的各位數(shù)碼0變?yōu)?,1變?yōu)?。也就是說,若xi=1,則反碼為xi=0;若xi=0,則反碼xi=1。數(shù)值上面的一橫表示反碼的意思。在計算機中用觸發(fā)器寄存數(shù)碼,若觸發(fā)器Q端輸出表示原碼,則其Q端輸出就是反碼。由此可知,反碼是容易得到的。
對定點小數(shù),反碼表示的定義為
??? ? (2.11)
其中n代表數(shù)的位數(shù)。
在一些文獻中,這種以2為基數(shù)的反碼又稱為1的補碼。
一般情況下,對于正數(shù) x=+0.x1x2…xn, 則
[x]反=0.x1x2…xn
對于負數(shù)x=-0.x1x2…xn ,則有
[x]反=1.x1x2…xn
對于0,有[+0]反和[-0]反之分:
[+0]反=0.00...0
[-0]反=1.11...1
我們比較反碼與補碼的公式
[x]反=(2-2-n)+x
[x]補=2+x
可得到
? (2.12)
這就是通過反碼求補碼的重要公式。這個公式告訴我們,若要一個負數(shù)變補碼,其方法是符號位置1,其余各位0變1,1變0,然后在最末位(2-n)上加1。
對定點整數(shù),反碼表示的定義為
? (2.13)
?4.移碼表示法
移碼通常用于表示浮點數(shù)的階碼。由于階碼是個n位的整數(shù),假定定點整數(shù)移碼形式為x0x1x2…xn時,對定點整數(shù),移碼的傳統(tǒng)定義是真值加上一個固定常數(shù)2n
??? ? (2.14)
若階碼數(shù)值部分為7位,以x表示真值,則
[x]移=27+x= 128 +x?? 128 >x≥-128
例如,當正數(shù)x=+1010101 時,[x]移=1,1010101 ;
當負數(shù)x=-10101 01時,[x]移=27+x=27-1010101=10000000 - 1010101 = 0,0101011。
移碼中的逗號不是小數(shù)點,而是表示左邊一位是符號位。顯然,移碼中符號位x0表示的規(guī)律與原碼、補碼、反碼相反。
小結(jié):上面的數(shù)據(jù)四種機器表示法中,移碼表示法主要用于表示浮點數(shù)的階碼。由于補碼表示對加減法運算十分方便,因此目前機器中廣泛采用補碼表示法。在這類機器中,數(shù)用補碼表示,補碼存儲,補碼運算。也有些機器,數(shù)用原碼進行存儲和傳送,運算時改用補碼。還有些機器在做加減法時用補碼運算,在做乘除法時用原碼運算。
[例3]以定點整數(shù)為例,用數(shù)軸形式說明原碼、反碼、補碼表示范圍和可能的數(shù)碼組合情況。
[解:]
原碼、反碼、補碼表示分別示于下圖。與原碼、反碼不同,在補碼表示中“0”只有一種形式,且用補碼表示負數(shù)時范圍可到-2n 。
[例4]將十進制真值(-127,-1,0,+1,+127)列表表示成二進制數(shù)及原碼、反碼、補碼、移碼值。
[解:]
二進制真值x及其諸碼值列于下表,其中0在[x]原[x]反中有兩種表示。由表中數(shù)據(jù)可知,補碼值與移碼值差別僅在于符號位不同。
[例5]設機器字長16位,定點表示,尾數(shù)15位,數(shù)符1位,問:
(1)定點原碼整數(shù)表示時,最大正數(shù)是多少?最小負數(shù)是多少?
(2)定點原碼小數(shù)表示時,最大正數(shù)是多少?最小負數(shù)是多少?
[解:]
[例6]假設由S,E,M三個域組成的一個32位二進制字所表示的非零規(guī)格化浮點數(shù)x,真值表示為:
x=(-1)s×(1.M)×2E-128
問:它所表示的規(guī)格化的最大正數(shù)、最小正數(shù)、最大負數(shù)、最小負數(shù)是多少?
[解:]
非常好我支持^.^
(104) 99%
不好我反對
(1) 1%
相關(guān)閱讀:
- [電子說] 火遍童年的FC游戲是使用什么語言編寫的 2023-10-20
- [電子說] runtime 的一些對比選型和應用 2023-05-26
- [電子說] 介紹一下機器碼與匯編代碼的特點和一般功能 2023-03-31
- [電子說] 編譯器把代碼轉(zhuǎn)化為機器碼的過程 2022-08-03
- [電子說] 機器碼是什么 2019-08-09
- [電子說] 電腦機器碼怎么修改 2019-08-09
- [電子說] 機器碼怎么改 2019-08-05
- [電子說] 自己歸納整理的ARM THUMB指令機器碼表 2018-10-26
( 發(fā)表人:admin )