【问题标题】:How binaries are generated using Punched cards?如何使用打孔卡生成二进制文件?
【发布时间】:2020-03-10 13:23:08
【问题描述】:

我不确定哪个平台适合询问打孔卡,所以我在这里尝试一下(毕竟打孔卡也是编程的一部分)。

我认为打孔卡已经代表二进制代码,因为孔表示0,其余位置表示打孔卡上的1。但后来我读到你可以使用穿孔卡片来展示 Cobol 或 Fortran 代码。我还注意到打孔卡上每列总是有 2 个孔。这样的事情让我很困惑。

问题: ****我想知道打孔卡是否真的是二进制文件,或者需要某种汇编程序才能将打孔卡提供的输入转换为机器码?****

【问题讨论】:

标签: assembly machine-code ibm


【解决方案1】:

我认为打孔卡已经用二进制表示代码,因为在打孔卡上孔表示 0,其余位置表示 1。

有不同类型的穿孔卡片。

System 3 punched card 上,数据以二进制数据的形式存储,正如您所期望的那样。

不过,您图片中显示的卡片是80-column IBM cards,这似乎是最常见的打孔卡片类型。

使用这种类型的穿孔卡片,您最初可以在每张卡片上存储多达 80 个十进制位:

每列有 10 个位置(标记为“0”-“9”)。要在列中存储数字,请在相应位置打孔:要存储数字“5”,请在位置“5”打孔。

这意味着最初每列只有一个孔。

后来,其他字符被存储在这些卡片上。这是通过每列打两个孔并在卡片顶部添加两行(内部命名为“11”和“12”)来完成的。

在每一列中,您可以:

  • 在 12 个位置之一打一个孔或
  • 在“1”-“9”位置之一打一个孔,在“0”、“11”或“12”位置打第二个孔。

这允许您存储多达 12 + 3*9 = 39 个不同的字符加上空格字符(它似乎由没有孔的列表示)。

我想知道打孔卡是否真的是二进制文件,还是需要某种汇编程序才能将打孔卡提供的输入转换为机器码?

IBM 1401 的二进制代码存储在“80 列”型穿孔卡片上。穿孔卡片的代码被加载到 RAM(实际上是磁芯内存)中并直接执行。

但是,据我所知,在 1401 上,每列最多可以有 3 个孔。

但这种穿孔卡片也非常流行用于存储 Fortran 程序:每个代码行一张卡片。如果您有一张包含 Fortran 代码的卡,那么您需要一个 Fortran 编译器。

【讨论】:

    【解决方案2】:

    IBM 穿孔卡片(如图所示)用于输入字符。 各种漏洞被映射到 IBM 大型机使用的“EBCDIC”字符代码。

    整体到 EBCDIC 编码的映射非常随意。

    编码方案(如果我没记错的话)是有 12 行和 80 列。前两行是 11 和 12,后十行是 0 到 9。

    请参阅此处了解详细信息: https://en.wikipedia.org/wiki/Punched_card#IBM_80-column_punched_card_format_and_character_codes

    0-9 中的单个整数映射到 EBCIC 编号 F0-F9。 第 11 行的一个洞加上一个映射到字母 A->J 的数字 第 12 行的一个洞加上一个映射到 K->R 的数字 第 0 行的一个洞加上另一个映射到“/S->Z”的数字

    还有其他半官方的“overpunch”代码涉及三个或更多孔,可以代表所有可能的二进制值。我记得一些目标代码 输出到打孔卡以转移到另一台机器。 结果看起来像一组纸巾和接收处的读者 需要多次尝试才能读取整副牌而不会卡住或撕掉卡片。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2017-09-24
      • 2019-11-22
      • 2014-07-13
      • 2020-03-22
      相关资源
      最近更新 更多