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