字組 (電腦)
在電腦領域,對於某種特定的電腦設計而言,字組(英語:word)是用於表示其自然的資料單位的術語。在這個特定電腦中,字組是其用來一次性處理事務的一個固定長度的位元(bit)組。一個字組的位數(即字組長)是電腦系統結構中的一個重要特性。
字組長度在電腦結構和操作的多個方面均有體現。電腦中大多數暫存器的大小是一個字組長。電腦處理的典型數值也可能是以字組長為單位。CPU和主記憶體之間的資料傳送單位也通常是一個字組長。還有在主記憶體中用於指明一個儲存位置的位址也經常是以字組長為單位的。
現代電腦的字組長通常為16、32、64位元。其他曾經使用過的字組長有:8、9、12、18、24、36、39、40、48、60位元;slab是早期的另一個字組長實例。某些最早期的電腦是十進制的而不是二進制的,通常擁有10位或者12位元的十進制數字組作為字組長,還有一些早期的電腦根本就沒有固定字組長。
有時候字組長被定義為某個特定值是為了與早期的電腦保持相容。現在個人電腦中最通用的微處理器(例如:Intel的Pentium系列和AMD的Athlon系列)就是一個例子。它們中的IA-32架構是早期的具有16位元字組長的Intel 8086架構的擴充。而IA-32處理器仍然支援8086(x86)程式程式所以在IA-32中,「欄位」的含義仍然為16位元,儘管事實上它運作起來(特別是當預設運算元為32位元時)更像一台32位元電腦。類似地,在更新型的x86-64架構中,「字組」仍然是16位元的,雖然64位元運算元更為常見。
字組的使用
編輯根據電腦的組織情況,字組長單位可能被應用到:
- 整數–電腦處理的整數值通常可以有若干種不同的長度,但是其中總有一種正好是該架構的字組長。如果有的話,其他的整數長度很可能是字組長的倍數或分數。小尺寸的整數尺寸通常是為了提高儲存效率;當它被載入處理器時,它經常被轉換成字組長尺寸的形式。
- 浮點數–電腦處理的浮點數通常是一個字組長或字組長的倍數。
- 位址–電腦處理的記憶體位址必須有足夠的尺寸,以便可以表示需要的數值範圍,但是又不能過大。經常使用的尺寸是字組,不過也可以是字組的倍數或分數。
- 暫存器– 處理器暫存器根據它要處理的資料類型被設計成適當的尺寸,例如:整數、浮點數、位址。許多電腦架構使用「通用」暫存器,它們可以儲存任何型態的資料,可以允許儲存哪怕是最大的資料類型。它們的尺寸通常是其架構的字組長。
- 記憶體-處理器傳送–當處理器從記憶體子系統讀取資料至暫存器,或者,寫暫存器資料到記憶體,傳送的資料通常是字組。在簡單的儲存系統中,字組在資料匯流排上傳送,它一般為一個字組或半個字組。在使用快取的儲存系統,在處理器和一級快取之間傳送的是一個字組長,而在更低階的儲存層次上傳送的可能是更大的尺寸(這尺寸是字組的倍數)。
- 編址單位–在一個給定的架構中,連續的位址值對應連續的記憶體單位;該單位就是編址單位。在大部分電腦中,這個單位或者是一個字元(例如:位元組)或者是一個字組(少部分電腦也使用位(bit)編址單位)。如果單位是字組,那麼用指定長度的位址就可以訪問較大數量的儲存空間。另一方面,如果單位是位元組,那麼就可以訪問單個的字元(i.e. selected during the memory operation)。
- 指令– 機器指令通常是字組長的分數或倍數。因為指令和資料經常共享同一個儲存子系統,所以自然作出這樣的選擇。而在哈佛架構(Harvard architecture)中,指令和資料的長度並不需要有關聯。
字組長的選擇
編輯在設計電腦時,字組長的選擇是非常重要的。設計上的考慮傾向於為特定的用途(如位址)設定特定的位長。然而,出於經濟的考慮,又應該僅使用一種尺寸,或者很少的幾種與基本尺寸成倍數或分數(約數)關係的尺寸。這個首選的基本尺寸就成為該架構的字組長。
字元的尺寸對於字組長的選擇也有影響。20世紀60年代中期以前,字元大部分以6位儲存;這樣最多允許64個字元,因此不能有大寫字組母。由於將字組長定義成字元尺寸的倍數在處理時間和儲存空間上都比較划算,所以這個時期字組長也就被定義為6位(在二進制機器上)的倍數。通常的選擇是36位元字組長,這也是適合於浮點數格式的一個長度。
隨著IBM360系統的引入——該系統使用8位元字元,並支援大小寫字組母——標準的字元(確切地說:位元組)尺寸也轉變成為8位元。從那以後,字組長也自然變成了8的倍數,16、32、64位元字組長被廣泛使用。
各種字組長的架構
編輯早期的電腦設計中包括可變字組長設計。在這類設計中,數字組運算元沒有固定的長度,它們通過檢查某個特殊字元來判斷是否結束。這樣的機器使用BCD編碼表示數字組,例如IBM 702、IBM 705、IBM 7080、IBM 7010、UNIVAC 1050、IBM 1401和IBM 1620。
大部分這樣的機器一次處理一個儲存單元,因為每條指令和資料占用的數個單元,所以指令將使用數個周期來讀取記憶體。這類機器經常因為這個原因變得非常慢。例如,在IBM 1620 Model I上,取指令需要8個周期,只是為了讀取12個數字組(Model II降低到6個周期,不過如果指令不需要取其中的一個1個位址域的話,可以只需要4個周期;如果兩個都不需要,則只需要1個周期)
字組和位元組編址
編輯字組長對電腦架構的記憶體模式有很大的影響。特別是:通常選擇字組作為記憶體的編址方案,所謂記憶體編址方案就是位址碼能夠指定的最小儲存單位。In this approach,編號相鄰的記憶體字組,其位址編號相差一。在電腦中這樣很自然,因為它通常總是要處理以字組為單位的資料(或者是以字組的倍數)。並且具有讓指令可以使用最小的長度來指定一個位址的優點,這樣,就可以減少指令長度或者可以定義更多的指令條數。
當電腦很大的工作量是用來處理位元組時,通常定義位元組作為位址編址單位要比字組更好。這樣做字串中的單個字元可以通過位址直接指定。當然,一個字組仍然可以被位址訪問,但是比起字組編址方案,它的位址將使用更多的位數。在這種組織結構中,字組長需要被定義為字元長度的整數倍。這種編址方案在IBM 360中被使用,此後即變成電腦設計中最普遍的方案。
2的冪
編輯資料常常要占用不同大小的儲存空間,例如,有些數值比其他的數值要求有更高的精度。通常使用的長度是編址單位(以字組為單位編址或以位元組為單位編址)的倍數,這個倍數常常是的2的冪。這樣做是比較便利的,因為這樣的話,將一個處理對象在陣列中的索引值轉化為這個處理對象的位址只需要進行一個移位元運算(這在硬體上只需要進行布線的變化)而不需要進行乘操作。某些時候這樣的做法還可以避免除操作。因此,一些現代電腦設計使用的字組長(或者其他的運算元)是2的冪乘以位元組尺寸。
字組長家族
編輯隨著電腦設計日益複雜,一個單一字組長的核心作用在電腦架構中已經不那麼重要。雖然硬體有能力支援更寬的資料類型,但是在擴充處理器效能時,市場卻有強大的壓力要求新產品保持向下相容。因此,在一個新架構的向下相容的設計中,核心的字組長不得不與原始機型的字組長共存。原始的字組長在未來設計中保持可用,這就構成了字組長家族的基礎。
這種情形的一個主要的實例是x86系列的設計。原始的8086架構無疑是使用16位元字組長的。80386在8086的基礎上進行了大幅改進,使其基於32位元系統架構。如果不用考慮其他因素,它將是32位元的,但是作為8086的擴充,它的字組長繼續被當作16位元的。(也因此,有人說80386和它的後繼處理器是"32位元"的(32-bit),但不是32位元字組的(32-bit word),原文:As a result of this, one hears of the 80386 and successor processors as being "32-bit", but usually not as having a 32-bit word.——譯者)同樣的情形最近又發生了,當AMD64架構使64位元在系統架構具有主要地位,但是它仍然沒有放棄對16位元和32位元的支援。
因此,今天我們看到的電腦架構更多的是基於一個有聯絡的、類似的字組長家族,而不是一個單一的字組長體系結構。這些尺寸以整因子(integral factors)——通常是2的冪——互相關聯。直接將它們中的任何一個尺寸定義為該系統的字組長是武斷的,因為這些尺寸的設計可能是因為這一系列體系架構的發展的歷史原因,而不是體系自己的最新設計中的特性。
Dword和Qword
編輯在電腦科學中, dword(雙倍字組)是一種資料單位,它是字組的二倍或者說是qword的一半。在具有16位元字組長的x86平台上,dword資料單位具有32位元長度。
qword(四倍字組)是一種大小是字組長的四倍的資料單位。在通用的x86平台上,該單位的資料具有64位元,因為x86系統的字組定義為16位元(不論實際的機器上工作在那個基本位長上的)
另外,Intel使用術語double quadruple word,或者DQWord(雙四倍字組)來指定128位元資料,這在SSE和它的更原始版本中可以看到。
字組長表
編輯年份 | 電腦 架構 |
字組長 | 整數 長度 |
浮點數 長度 |
指令長度 | 編址單位 | 字元 長度 |
---|---|---|---|---|---|---|---|
1941 | Zuse Z3 | 22 b | – | w | 8 b | w | – |
1942 | ABC | 50 b | w | – | – | – | – |
1944 | Harvard Mark I | 23 d | w | – | 24 b | – | – |
1946 (1948) {1953} |
ENIAC (w/Panel #16) {w/} |
10 d | w, 2w (w) {w} |
– | – (2d, 4d, 6d, 8d) |
– – {w} |
– |
1951 | UNIVAC I | 12 d | w | – | ½w | w | 1 d |
1952 | IAS machine | 40 b | w | – | ½w | w | 5 b |
1952 | IBM 701 | 36 b | ½w, w | – | ½w | ½w, w | 6 b |
1952 | UNIVAC 60 | n d | 1d, ... 10d | – | – | – | 2d, 3d |
1953 | IBM 702 | n d | 0d, ... 511d | – | 5d | d | 1 d |
1953 | UNIVAC 120 | n d | 1d, ... 10d | – | – | – | 2d, 3d |
1954 (1955) |
IBM 650 (w/IBM 653) |
10 d | w | – (w) |
w | w | 2 d |
1954 | IBM 704 | 36 b | w | w | w | w | 6 b |
1954 | IBM 705 | n d | 0d, ... 255d | – | 5d | d | 1 d |
1954 | IBM NORC | 16 d | w | w, 2w | w | w | – |
1956 | IBM 305 | n d | 1d, ... 100d | – | 10d | d | 1 d |
1958 | UNIVAC II | 12 d | w | – | ½w | w | 1 d |
1958 | SAGE | 32 b | ½w | – | w | w | 6 b |
1958 | Autonetics Recomp II | 40 b | w, 79 b, 8d, 15d | 2w | ½w | ½w, w | 5 b |
1959 | IBM 1401 | n d | 1d, ... | – | d, 2d, 4d, 5d, 7d, 8d | d | 1 d |
1959 (TBD) |
IBM 1620 | n d | 2d, ... | – (4d, ... 102d) |
12d | d | 2 d |
1960 | LARC | 12 d | w, 2w | w, 2w | w | w | 2 d |
1960 | IBM 1410 | n d | 1d, ... | – | d, 2d, 6d, 7d, 11d, 12d | d | 1 d |
1960 | IBM 7070 | 10 d | w | w | w | w, d | 2 d |
1960 | PDP-1 | 18 b | w | – | w | w | 6 b |
1961 | IBM 7030 (Stretch) |
64 b | 1b, ... 64b, 1d, ... 16d |
w | ½w, w | b, ½w, w | 1 b, ... 8 b |
1961 | IBM 7080 | n d | 0d, ... 255d | – | 5d | d | 1 d |
1962 | UNIVAC III | 25 b, 6 d | w, 2w, 3w, 4w | – | w | w | 6 b |
1962 | UNIVAC 1107 | 36 b | 1/6w, ⅓w, ½w, w | w | w | w | 6 b |
1962 | IBM 7010 | n d | 1d, ... | – | d, 2d, 6d, 7d, 11d, 12d | d | 1 d |
1962 | IBM 7094 | 36 b | w | w, 2w | w | w | 6 b |
1963 | Gemini Guidance Computer | 39 b | 26 b | – | 13 b | 13 b, 26 b | – |
1963 (1966) |
Apollo Guidance Computer | 15 b | w | – | w, 2w | w | – |
1964 | CDC 6600 | 60 b | w | w | ¼w, ½w | w | 6 b |
1965 | IBM 360 | 32 b | ½w, w, 1d, ... 16d |
w, 2w | ½w, w, 1½w | 8 b | 8 b |
1965 | UNIVAC 1108 | 36 b | 1/6w, ¼w, ⅓w, ½w, w, 2w | w, 2w | w | w | 6 b, 9 b |
1965 | PDP-8 | 12 b | w | – | w | w | 8 b |
1970 | PDP-11 | 16 b | w | 2w, 4w | w, 2w, 3w | 8 b | 8 b |
1971 | Intel 4004 | 4 b | w, d | – | 2w, 4w | w | – |
1972 | Intel 8008 | 8 b | w, 2d | – | w, 2w, 3w | w | 8 b |
1972 | Calcomp 900 | 9 b | w | – | w, 2w | w | 8 b |
1974 | Intel 8080 | 8 b | w, 2w, 2d | – | w, 2w, 3w | w | 8 b |
1975 | Cray-1 | 64 b | 24 b, w | w | ¼w, ½w | w | 8 b |
1975 | Motorola 6800 | 8 b | w, 2d | – | w, 2w, 3w | w | 8 b |
1975 | MOS Tech. 6501 MOS Tech. 6502 |
8 b | w, 2d | – | w, 2w, 3w | w | 8 b |
1976 | Zilog Z80 | 8 b | w, 2w, 2d | – | w, 2w, 3w, 4w, 5w | w | 8 b |
1978 (1980) |
Intel 8086 (w/Intel 8087) |
16 b | ½w, w, 2d (w, 2w, 4w) |
– (2w, 4w, 5w, 17d) |
½w, w, ... 7w | 8 b | 8 b |
1978 | VAX-11/780 | 32 b | ¼w, ½w, w, 1d, ... 31d, 1b, ... 32b | w, 2w | ¼w, ... 14¼w | 8 b | 8 b |
1979 | Motorola 68000 | 32 b | ¼w, ½w, w, 2d | – | ½w, w, ... 7½w | 8 b | 8 b |
1982 (1983) |
Motorola 68020 (w/Motorola 68881) |
32 b | ¼w, ½w, w, 2d | – (w, 2w, 2½w) |
½w, w, ... 7½w | 8 b | 8 b |
1985 | ARM1 | 32 b | w | – | w | 8 b | 8 b |
1985 | MIPS | 32 b | ¼w, ½w, w | w, 2w | w | 8 b | 8 b |
1989 | Intel 80486 | 16 b | ½w, w, 2d w, 2w, 4w |
2w, 4w, 5w, 17d | ½w, w, ... 7w | 8 b | 8 b |
1989 | Motorola 68040 | 32 b | ¼w, ½w, w, 2d | w, 2w, 2½w | ½w, w, ... 7½w | 8 b | 8 b |
1991 | PowerPC | 32 b | ¼w, ½w, w | w, 2w | w | 8 b | 8 b |
2000 | IA-64 | 64 b | 8 b, ¼w, ½w, w | ½w, w | 41 b | 8 b | 8 b |
2002 | XScale | 32 b | w | w, 2w | ½w, w | 8 b | 8 b |
說明: b:位, d: 10進制數, w:該架構的字組長, n:變數長度(variable size) |
參見
編輯參考資料
編輯- Gerrit A. Blaauw & Frederick P. Brooks, Computer Architecture: Concepts and Evolution(Addison-Wesley, 1997, ISBN 0-201-10557-8)
- Anthony Ralston & Edwin D. Reilly, Encyclopedia of Computer Science Third Edition(Van Nostrand Reinhold, 1993, ISBN 0-442-27679-6)