99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Assembly 整形表示法

2018-10-26 13:47 更新
整形有兩種類型:有符號(hào)和無(wú)符號(hào)。無(wú)符號(hào)整形(即此類型沒(méi)有負(fù)數(shù))以一種非常直接的二進(jìn)制方式來(lái)表示。數(shù)字200作為一個(gè)無(wú)符號(hào)整形數(shù)將被表示為11001000(或十六進(jìn)制C8)。


有符號(hào)整形(即此類型可能為正數(shù)也可能為負(fù)數(shù))以一種更復(fù)雜的方式來(lái)表示。例如,考慮?56。+56當(dāng)作一個(gè)字節(jié)來(lái)考慮時(shí)將被表示為00111000。在紙上,你可以將?56表示為?111000,但是在電腦內(nèi)存中如何以一個(gè)字節(jié)來(lái)表示,如何儲(chǔ)存這個(gè)負(fù)號(hào)呢?


有三種普遍的技術(shù)被用來(lái)在電腦內(nèi)存中表示有符號(hào)整形。所有的方法都把整形的最大有效位當(dāng)作一個(gè)符號(hào)位來(lái)使用。如果數(shù)為正數(shù),則這一位為0;為負(fù)數(shù),這一位就為1。


原碼

第一種方法是最簡(jiǎn)單的,它被稱為原碼。它用兩部分來(lái)表示一個(gè)整形。第一部分是符號(hào)位,第二部分是整形的原碼。所以56表示成字節(jié)形式為00111000 (符號(hào)位加了下劃線)而?56將表示為10111000。

最大的一個(gè)字節(jié)的值將是01111111或+127,而最小的一個(gè)字節(jié)的值將是11111111或?127。要得到一個(gè)數(shù)的相反數(shù),只需要將符號(hào)位變反。這個(gè)方法很簡(jiǎn)單直接,但是它有它的缺點(diǎn)。首先,0會(huì)有兩個(gè)可能的值:+0 (00000000) 和?0(10000000)。因?yàn)?不是正數(shù),也不是負(fù)數(shù),所以這些表示法都應(yīng)該把它表示成一樣。這樣會(huì)把CPU的運(yùn)算邏輯弄得很復(fù)雜。第二,普通的運(yùn)算同樣是麻煩的。如果10加?56,這個(gè)將改變?yōu)?0減去56。同樣,這將會(huì)復(fù)雜化CPU的邏輯。

反碼

第二種方法稱為反碼表示法。一個(gè)數(shù)的反碼可以通過(guò)將這個(gè)數(shù)的每一位求反得到。(另外一個(gè)得到的方法是:新的位值等于1?老的位值。) 例如:00111000 (+56)的反碼是11000111。在反碼表示法中,計(jì)算一個(gè)數(shù)的反碼等價(jià)于求反。因此,?56就可以表示為11000111。注意,符號(hào)位在反碼中
是自動(dòng)改變的,你需要兩次求反碼來(lái)得到原始的數(shù)值。就像第一種方法一樣,

0有兩種表示:

00000000 (+0)和11111111 (?0)。

用反碼表示的數(shù)值的運(yùn)算同樣是麻煩的。這有一個(gè)小訣竅來(lái)得到一個(gè)十六進(jìn)制數(shù)值的反碼,而不需要將它轉(zhuǎn)換成二進(jìn)制。這個(gè)訣竅就是用F(或十進(jìn)制中的15)減去每一個(gè)十六進(jìn)制位。這個(gè)方法假定數(shù)中的每一位的數(shù)值是由4位二進(jìn)制組成的。這有一個(gè)例子:+56 用十六進(jìn)制表示為38。要得到反碼,用F減去每一位,得到C7。這個(gè)結(jié)果是與上面的結(jié)果吻合的。

補(bǔ)碼

前面描述的兩個(gè)方法用在早期的電腦中?,F(xiàn)代的電腦使用第三種方法稱為補(bǔ)碼表示法。一個(gè)數(shù)的補(bǔ)碼可以由下面兩步得到:

1. 找到該數(shù)的反碼
2. 將第一步的結(jié)果加1

這有一個(gè)使用00111000 (56)的例子。首先,經(jīng)計(jì)算得到反碼:11000111 。

然后加1:

反碼

在補(bǔ)碼表示法中,計(jì)算一個(gè)補(bǔ)碼等價(jià)于對(duì)一個(gè)數(shù)求反。因此,11001000是?56的補(bǔ)碼。要得到原始數(shù)值需兩次求反。令人驚訝的是補(bǔ)碼不符合這個(gè)規(guī)定。通過(guò)對(duì)11001000的反碼加1得到補(bǔ)碼。

補(bǔ)碼

當(dāng)在兩個(gè)補(bǔ)碼操作數(shù)間進(jìn)行加法操作時(shí),最左邊的位相加可能會(huì)產(chǎn)生一個(gè)進(jìn)位。這個(gè)進(jìn)位是不被使用的。記住在電腦中的所有數(shù)據(jù)都是有固定大小的(根據(jù)位數(shù)多少)。兩個(gè)字節(jié)相加通常得到一個(gè)字節(jié)的結(jié)果(就像兩個(gè)字相加得到一個(gè)字,等。) 這個(gè)特性對(duì)于補(bǔ)碼表示法來(lái)說(shuō)是非常重要的。例如,把0作為一個(gè)字節(jié)來(lái)考慮它的補(bǔ)碼形式(00000000)。計(jì)算它的補(bǔ)碼形式得到總數(shù):

總數(shù)

其中c代表一個(gè)進(jìn)位。(稍后將展示如何偵查到這個(gè)進(jìn)位,但是它在這的結(jié)果中不儲(chǔ)存。)因此,在補(bǔ)碼表示法中0只有一種表示。這就使得補(bǔ)碼的運(yùn)算比前面的方法簡(jiǎn)單。

使用補(bǔ)碼表示法,一個(gè)有符號(hào)的字節(jié)可以用來(lái)代表從?128 到+127的數(shù)值。表2.1 展示一些可選的值。如果使用了16位,那么可以表示從?32; 768到+32; 767的有符號(hào)數(shù)值。+32; 767可以表示為7FFF,?32; 768 為8000, -128為FF80而-1為FFFF。32位的補(bǔ)碼大約可以表示?20億到+20億的數(shù)值范圍。

補(bǔ)碼表示法

CPU對(duì)某一的字節(jié)(或字,雙字)具體表示多少并不是很清楚。匯編語(yǔ)言并沒(méi)有類型的概念,而高級(jí)語(yǔ)言有。數(shù)據(jù)解釋成什么取決于使用在這個(gè)數(shù)據(jù)上的指令。到底十六進(jìn)制數(shù)FF被看成一個(gè)有符號(hào)數(shù)?1 還是無(wú)符號(hào)數(shù)+255取決于程序員。C語(yǔ)言定義了有符號(hào)和無(wú)符號(hào)整形。這就使C編譯器能決定使用正確的指令來(lái)使用數(shù)據(jù)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)