為什麼 EBCDIC 中的字母不連續?

ASCII 標準於 1963 年採用,現在幾乎沒有人使用前 128 個字符與 ASCII 不同的編碼。 然而,直到上個世紀末,EBCDIC 一直被積極使用——IBM 大型機及其蘇聯 ES 計算機克隆的標準編碼。 EBCDIC 仍然是 z/OS 中的默認編碼,z/OS 是現代 IBM Z 大型機的標準操作系統。

查看 EBCDIC 時,立即引起您注意的是這些字母不是連續的:介於 I и J 和之間 R и S 未使用的位置仍然存在(在這些間隔的 ES 計算機上 分散式 西里爾符號)。 誰會想到用相鄰字母之間不相等的間隙對字母進行編碼?

為什麼 EBCDIC 中的字母不連續?

EBCDIC(“擴展 BCDIC”)這個名稱暗示這種編碼——與 ASCII 不同——不是從頭開始創建的,而是基於從那時起一直使用的六位 BCDIC 編碼 IBM 704 (1954):

為什麼 EBCDIC 中的字母不連續?

沒有直接的向後兼容性:BCDIC 的一個方便的特性,隨著向 EBCDIC 的過渡而丟失,是數字 0 - 9 對應代碼0-9。 然而,七個代碼之間的差距 I и J 和八個代碼之間 R и S 在 BCDIC 中已經是。 哪兒來的呢?

(E)BCDIC 的歷史與 IBM 的歷史同時開始,遠早於電子計算機。 IBM 由四家公司合併而成,其中技術最先進的是 Tabulating Machine 公司,由發明家 Herman Hollerith 於 1896 年創立 製表符. 最初的製表機只是簡單地計算在某個地方打孔的卡片數量; 但在 1905 年,Hollerith 開始生產 十進制 選項卡。 十進制製表機的每張卡片都由任意長度的字段組成,以通常的十進制形式寫在這些字段中的數字在整副牌中相加。 將地圖細分為字段是通過連接製表符配線板上的電線來設置的。 例如,在這張 Hollerith 打孔卡上, 存儲 在國會圖書館,數字 23456789012345678 顯然是浮雕的,不知道它是如何劃分為字段的:

為什麼 EBCDIC 中的字母不連續?

最細心的人可能會注意到 Hollerith 的地圖有 12 行表示球洞,儘管十行足以表示數字; 在 BCDIC 中,12 個可能的代碼中只有 16 個用於最高有效兩位的每個值。

當然,這並非巧合。 Hollerith 最初打算為“特殊標記”添加額外的行,這些標記沒有被匯總,而是被簡單地計算——就像在第一個製表符中一樣。 (今天我們稱它們為“位域”。)此外,在“特殊標記”之間可以設置組指示符:如果在製表時不僅需要最終和,還需要中間值,則製表器在檢測到時停止任何一組指標發生變化,操作員必須將小計從數字記分牌複製到紙上,重新設置記分牌,然後重新開始製表。 例如,在計算資產負債表時,一組卡片可以對應一個日期或一個交易對手。

到 1920 年,當 Hollerith 已經退休時,“打印製表機”開始使用,它連接到電傳打字機並且可以自己打印小計而不需要操作員干預。 現在的困難是確定每個印刷數字所指的是什麼。 1931 年,IBM 決定使用“特殊標記”來指定字母:第 12 行的標記表示字母來自 AI, 第 11 卷 - 從 JR, 零 - 從 SZ. 新的“字母製表符”可以打印每組卡片的名稱,以及小計; 同時,一個完整的列變成了字符之間的空間。 請注意 S 由 0+2 孔組合表示,而 0+1 組合最初並未使用,因為擔心同一列中並排的兩個孔可能會導致讀取器出現機械問題。

為什麼 EBCDIC 中的字母不連續?

現在您可以從稍微不同的角度查看 BCDIC 表:

為什麼 EBCDIC 中的字母不連續?

除了0和空格互換外,高兩位定義了對應字符從1931年開始打入打孔卡片的“特殊標記”; 低四位決定卡片主體部分打孔的數字。 符號支持 & - / 1930 年代加入 IBM 標籤,這些字符的 BCDIC 編碼對應於為它們打孔的孔組合。 當需要支持更多字符時,第 8 行被打孔作為額外的“特殊標記”——因此,一列中最多可以有三個孔。 直到本世紀末,這種穿孔卡片的格式幾乎沒有變化。 在蘇聯,保留了 IBM 的拉丁語和標點符號編碼,對於西里爾字母,他們在第 12、11、0 行同時打了幾個“特殊標記”——不限於一列三個孔。

在創建 IBM 704 計算機時,他們很長一段時間都沒有考慮它的字符編碼:他們採用了當時在穿孔卡片中已經使用的編碼,並且只“放置”了 0。 1964 年,當從 BCDIC 轉換為 EBCDIC 時,每個字符的低四位保持不變,儘管高位稍微打亂了一些。 因此,Hollerith 在上個世紀初選擇的穿孔卡格式影響了所有 IBM 計算機的架構,包括 IBM Z。

來源: www.habr.com

添加評論