本頁使用了標題或全文手工轉換

字 (電腦)

維基百科,自由的百科全書
跳至導覽 跳至搜尋
微處理器
1位元 2位元 4位元 8位元 12位元 16位元 18位元 24位元 31位元 32位元 36位元 48位元 64位元 128位元
應用程式
16位元 32位元 64位元  
資料大小
4位元 8位元 16位元 32位元 64位元 128位元
nibble octet / byte word dword qword DQWord

電腦領域,對於某種特定的電腦設計而言,英語:word)是用於表示其自然的資料單位的術語,而在台灣這個術語稱作「字組」,以與字的原意區別。在這個特定電腦中,字是其用來一次性處理事務的一個固定長度的位(bit)組。一個字的位數(即字長)是電腦系統結構中的一個重要特性。

字長在電腦結構和操作的多個方面均有體現。電腦中大多數暫存器的大小是一個字長。電腦處理的典型數值也可能是以字長為單位。CPU記憶體之間的資料傳送單位也通常是一個字長。還有而記憶體中用於指明一個儲存位置的地址也經常是以字長為單位的。

現代電腦的字長通常為16、32、64位元。其他曾經使用過的字長有:8、9、12、18、24、36、39、40、48、60位元;slab是早期的另一個字長例項。某些最早期的電腦是十進制的而不是二進制的,通常擁有10位或者12位元的十進制數字作為字長,還有一些早期的電腦根本就沒有固定字長。

有時候字長被定義為某個特定值是為了與早期的電腦保持相容。現在個人電腦中最通用的微處理器(例如:IntelPentium系列和AMDAthlon系列)就是一個例子。它們中的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位元字長被廣泛使用。

各種字長的架構[編輯]

早期的電腦設計中包括所謂的「可變字長」設計。(原文:Early machine designs included some that used what is often termed a variable word length.——譯者)。在這類設計中,數字運算元沒有固定的長度,它們通過檢查某個特殊字元來判斷是否結束。這樣的機器使用BCD編碼表示數字,例如IBM 702IBM 705IBM 7080IBM 7010UNIVAC 1050IBM 1401IBM 1620

大部分這樣的機器一次處理一個儲存單元,因為每條指令和資料佔用的數個單元,所以指令將使用數個周期來讀取記憶體。這類機器經常因為這個原因變得非常慢。例如,在IBM 1620 Model I上,取指令需要8個周期,只是為了讀取12個數字(Model II降低到6個周期,不過如果指令不需要取其中的一個1個地址域的話,可以只需要4個周期;如果兩個都不需要,則只需要1個周期)

字和位元組編址[編輯]

字長對電腦構架的記憶體模式有很大的影響。特別是:通常選擇字作為記憶體的編址方案,所謂記憶體編址方案就是地址碼能夠指定的最小儲存單位。In this approach,編號相鄰的記憶體字組,其地址編號相差一。在電腦中這樣很自然,因為它通常總是要處理以字為單位的資料(或者是以字的倍數)。並且具有讓指令可以使用最小的長度來指定一個地址的優點,這樣,就可以減少指令長度或者可以定義更多的指令條數。

當電腦很大的工作量是用來處理位元組時,通常定義位元組作為地址編址單位要比字更好。這樣做字串中的單個字元可以通過地址直接指定。當然,一個字仍然可以被地址存取,但是比起字編址方案,它的地址將使用更多的位數。在這種組織結構中,字長需要被定義為字元長度的整數倍。這種編址方案在IBM 360中被使用,此後即變成電腦設計中最普遍的方案。

2的冪[編輯]

資料常常要佔用不同大小的儲存空間,例如,有些數值比其他的數值要求有更高的精度。通常使用的長度是編址單位(以字為單位編址或以位元組為單位編址)的倍數,這個倍數常常是的2的冪。這樣做是比較便利的,因為這樣的話,將一個處理物件在陣列中的索引值轉化為這個處理物件的地址只需要進行一個移位操作(這在硬件上只需要進行布線的變化)而不需要進行乘操作。某些時候這樣的做法還可以避免除操作。因此,一些現代電腦設計使用的字長(或者其他的運算元)是2的冪乘以位元組尺寸。

字長家族[編輯]

隨着電腦設計日益複雜,一個單一字長的核心作用在電腦架構中已經不那麼重要。雖然硬件有能力支援更寬的資料型態,但是在擴充功能處理器效能時,市場卻有強大的壓力要求新產品保持回溯相容。因此,在一個新構架的回溯相容的設計中,核心的字長不得不與原始機型的字長共存。原始的字長在未來設計中保持可用,這就構成了字長家族的基礎。

這種情形的一個主要的例項是x86系列的設計。原始的8086構架無疑是使用16位元字長的。803868086的基礎上進行了大幅改進,使其基於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/Panel #26}
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