为什么 EBCDIC 中的字母不是连续的?

ASCII 标准于 1963 年采用,现在几乎没有人使用前 128 个字符与 ASCII 不同的编码。 然而,直到上世纪末,EBCDIC 才被积极使用——IBM 大型机及其苏联克隆 EC 计算机的标准编码。 EBCDIC 仍然是 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 由四家公司合并而成,其中技术最先进的是制表机公司,由发明家 Herman Hollerith 于 1896 年创立 制表机。 第一个制表机只是简单地计算在特定位置打孔的卡片数量; 但 Hollerith 于 1905 年开始生产 小数 制表机。 十进制制表机的每张卡片都由任意长度的字段组成,并且以通常的十进制形式写入这些字段中的数字在整个牌组上求和。 通过连接制表器接线板上的电线来确定将地图细分为字段。 例如,在这张 Hollerith 打孔卡上, 已存储 在美国国会图书馆,编号 23456789012345678 清晰地印有,但未知,分为几个字段:

为什么 EBCDIC 中的字母不是连续的?

最细心的人可能已经注意到,在 Hollerith 地图上,有 12 行洞,尽管对于数字来说 12 行就足够了; 在 BCDIC 中,对于最高有效两位的每个值,仅使用 16 个可能的代码中的 XNUMX 个。

当然,这并非巧合。 最初,霍尔瑞斯打算为“特殊标记”添加额外的行,这些行不会相加,而是简单地计数 - 就像第一个制表器一样。 (今天我们称它们为“位域”。)此外,在“特殊标记”中可以设置组指示符:如果制表不仅需要最终的总和,还需要中间的总和,那么制表器将在以下情况下停止:它检测到任何组指标发生变化,操作员必须将数字板中的小计重写到纸上,重置板并恢复制表。 例如,在计算会计余额时,一组卡可以对应于一个日期或一个交易对手。

到 1920 年,当 Hollerith 退休时,“打字制表机”开始使用,它连接到电传打字机,可以自行打印小计,无需操作员干预。 现在的困难是确定每个印刷数字所指的内容。 1931年,IBM决定使用“特殊标记”来表示字母:第12行的一个标记表示来自 AI,在 11 日 - 从 JR,从零开始 SZ。 新的“字母制表机”可以打印每组卡片的名称以及小计; 在这种情况下,完整的列变成了字符之间的空格。 请注意 S 由孔组合0+2指定,并且最初不使用0+1组合,因为担心同一列中彼此相邻的两个孔会导致阅读器中的机械问题。

为什么 EBCDIC 中的字母不是连续的?

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

为什么 EBCDIC 中的字母不是连续的?

除了0和空格颠倒外,最高两位定义了自1931年以来为相应字符打入打孔卡的“特殊标记”; 最低有效四位确定打入卡主要部分的数字。 符号支持 & - / 在 1930 世纪 8 年代被添加到 IBM 制表机中,这些字符的 BCDIC 编码对应于为它们打孔的组合。 当需要支持更多字符时,第 12 行被打孔作为额外的“特殊标记” - 因此,一列中最多可以有三个孔。 直到本世纪末,这种打孔卡的格式几乎保持不变。 在苏联,他们保留了 IBM 的拉丁文和标点符号编码,对于西里尔字母,他们在第 11、0、XNUMX 行同时打了几个“特殊标记”——不限于一列中的三个孔。

当IBM 704计算机被创建时,他们并没有考虑它的字符编码:他们采用了当时打孔卡中已经使用的编码,只是“把它放在它的位置上”。 0年,在从BCDIC到EBCDIC的过渡期间,每个符号的低四位保持不变,尽管高位进行了一些改组。 因此,Hollerith 在上世纪初选择的穿孔卡格式影响了所有 IBM 计算机的体系结构,包括 IBM Z。

来源: habr.com

添加评论