打孔纸袋原理

作者:Chen Moore
链接:https://www.zhihu.com/question/22892716/answer/57486035
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

只回答第一个问题吧,希望有帮助

打孔纸带编程本质上就是基于机器码的程序,虽然看起来很神秘但是其本质并没有什么难理解的。

看到你的标签里有写汇编,那么在这里假设你会一点汇编基础,讲个小例子好了

假定现在有一个CPU,其指令包括:

mov,add,and,or,xor,sub,shift,load,store,halt一共10个指令,对应的值分别是二进制的 0000 到 1001

同时,CPU带有8个寄存器(r),分别对应了二进制的 0000 到 1111(r0 - r7 )

那么,我们来设想这样一段程序

第一步,将一个内存地址(例如 0x1a)放到寄存器0
第二步,寄存器0的地址所对应的数据读取到寄存器1
第三步,将另一个内存地址(例如0x2c)放到寄存器0
第四步,将寄存器0的地址所对应的数据读取到寄存器2
第五步,将寄存器1和寄存器2的数值相加,存储到寄存器3
第六步,将第三个地址(例如0x3e)放到寄存器0
第四步,将寄存器3的数值写入寄存器0所对应的地址

那么我们的基本的汇编代码看起来应该是
#0 mov r0 0x1a
#1 load r1 [r0]
#2 mov r0 0x2c
#3 load r2 [r0]
#4 add r3 r1 r2
#5 mov r0 0x3e
#6 store r3 [r0]
#7 halt

那么我们来试着把这些翻译成二进制数值

上面知道了有10个指令,同时这些指令也会带有自己的固定参数,我们以二进制每16位为一组做成编码,根据指令规范

mov: 0001 xxxx yyyy yyyy
load: 1000 xxxx yyyy 0000
add: 0010 xxxx yyyy zzzz
store: 1001 xxxx yyyy yyyy
halt: 0000 0000 0000 0000

其中 xxxx yyyy zzzz分别代表了代码中要写的具体数值,

于是翻译过去,就变成了
#0 0001 0000 0001 1010 - mov r0 0x1a
#1 1000 0001 0000 0000 - load r1 [r0]
#2 0001 0000 0010 1100 - mov r0 0x2c
#3 1000 0010 0000 0000 - load r2 [r0]
#4 0010 0011 0001 0010 - add r3 r1 r2
#5 0001 0000 0011 1110 - mov r0 0x3e
#6 1001 0011 0000 0000 - store r3 [r0]
#7 0000 0000 0000 0000 - halt

于是一个汇编代码就可以简单的翻译成纯粹的二进制格式,那么现在可以说一下纸带了

纸带的每一行规定为8个孔位,可以打孔也不打,其中打孔代表1,不打代表0
换而言之,纸带每一行是8个bit,两行也就是16个bit

上面那段二进制的代码,以每8位一行表现到纸带上,我用●表示打孔,○表示没有,那么就变成了
○○○●○○○○ 00010000
○○○●●○●○ 00011010
●○○○○○○● 10000001
○○○○○○○○
.....
不全部写了,大概就是这个样子

打孔纸带的原理就是这个,在这之前和在这之后编程的核心思想其实都没有什么变化,或者说冯氏架构的基本编程思路都在其中了



==========================================================================================================================
















==========================================================================================================================








  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
打孔 Viterbi(Punched Card Viterbi)是一种使用打孔卡片进行计算的Viterbi算法实现方法。 Viterbi算法是一种用于求解最优路径的动态规划算法。它通常用于解码隐马尔可夫模型中的观测序列,找出最有可能产生该观测序列的隐藏状态序列。 打孔 Viterbi算法的思想是将待解序列和状态转移矩阵编码到打孔卡片上。每个打孔卡片上的孔洞位置代表着不同的状态和观测符号。通过将序列和状态转移矩阵与打孔卡片叠加,可通过读取卡片上的洞穴信息来计算最优路径。 打孔 Viterbi算法的优点是可以极大地提高运算速度。由于状态和观测信息被编码到卡片上,计算过程中只需要通过检查卡片上的洞穴来确定当前状态和观测符号,而无需频繁地进行矩阵运算。这种方法在电子计算机还未发展起来的时代,是一种高效的解码方法。 然而,打孔 Viterbi算法也存在一些限制。首先,打孔卡片需要事先准备好,无法动态调整。其次,如果模型中的状态和观测符号较多,打孔卡片也会变得庞大而复杂,不便于使用和存储。最后,打孔卡片算法只适用于特定的应用场景,对于其他类型的问题,可能需要使用其他算法。 总而言之,打孔 Viterbi算法是一种使用打孔卡片进行计算的Viterbi算法实现方法。它通过将序列和状态转移矩阵编码到打孔卡片上,可以更高效地求解最优路径问题。然而,由于打孔卡片的限制,该算法只适用于特定应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值