- 論壇徽章:
- 0
|
原帖由 gauchy 于 2006-1-13 15:21 發(fā)表
小弟一直對(duì)機(jī)器字長(zhǎng)有點(diǎn)困惑,都知道有8位機(jī),16位機(jī)和32位機(jī)器,在定義數(shù)據(jù)類(lèi)型時(shí),分配的空間不同,比如int型在16位機(jī)上是2個(gè)字節(jié),而在32位機(jī)上就是4個(gè)字節(jié),我想知道到底是根據(jù)什么來(lái)分配的呢?int型可能有點(diǎn) ...
想深入了解. 學(xué)好匯編語(yǔ)言對(duì)你幫助非常大.
匯編語(yǔ)言中的,最基本的數(shù)據(jù)類(lèi)型有: (1) byte (2)word (3)double word
當(dāng)然,還有qdword類(lèi)型(8?jìng)(gè)字節(jié))等。
這些數(shù)據(jù)類(lèi)型由機(jī)器架構(gòu)決定。
也就是說(shuō):1字節(jié),2字節(jié),4字節(jié),8字節(jié)。每移一位就是2的倍數(shù)。
C語(yǔ)言的低級(jí)的高級(jí)語(yǔ)言,實(shí)現(xiàn)上是模擬匯編語(yǔ)言。
char 必須對(duì)應(yīng) byte , 所以它的類(lèi)型固定是1個(gè)字節(jié)。否則就沒(méi)有相應(yīng)的類(lèi)型訪問(wèn)1個(gè)字節(jié)的數(shù)據(jù)。
short 也必須對(duì)應(yīng)于 word, 所以它的類(lèi)型是2個(gè)字節(jié)。否則沒(méi)有相應(yīng)的類(lèi)型訪部2個(gè)字節(jié)的數(shù)據(jù)。
至于int 類(lèi)型:
(1)x86架構(gòu)的機(jī)器,基本都是32位。但是初始于實(shí)模式下,它是16位的。
(2)16位下,它只能訪問(wèn)16位的地址空間。
(3)所以,16位下,無(wú)論是int, long, long long(如果有的話) 都只能訪問(wèn)16位數(shù)據(jù)。即word
(4)在32位保護(hù)模式下,可以一次訪問(wèn)32位地址空間。那么,int 對(duì)應(yīng)于double word,long 和
long long都只能一次訪問(wèn)32位數(shù)據(jù)。long long 模擬訪問(wèn)64位數(shù)據(jù)。實(shí)際上是只能訪問(wèn)32位數(shù)據(jù)。
(5)當(dāng)x86-64架構(gòu),被初始化于long mode中的64位模式下,long 相對(duì)應(yīng)于64位數(shù)據(jù)。但也要看操作系統(tǒng)和編譯器的支持度。
[ 本帖最后由 mik 于 2006-1-17 21:04 編輯 ] |
|