你最早接触计算机或技术是啥时候?

  • 主题发起人 主题发起人 Teddy
  • 开始时间 开始时间
想起那种情景,哈哈。没有个人计算机,学校有一个大楼专门是为计算机的。我们那门课的期末考试是开卷好几周,解一组流体力学方程组,因为解出结果是要有逐步逼近的才会收敛得到解,如果编不好程序就会发散,得不到结果。很多同学没得到最终结果,但也通过了,说明那时搞个计算机程序比较有难度。
最麻烦的是程序是先打孔在那卷黑纸带上,语法没通过(比如少个标点之类),要一句句找,再打一段粘上。然后再预约上机时间,这样就算语法通过,程序本身也不见得能算出希望的结果,所以很多同学到最后也没得到解。:monster:



用打孔纸我不懂。是写的汇编,把二进制的程序打在纸上?
 
用打孔纸我不懂。是写的汇编,把二进制的程序打在纸上?
那卷打孔纸带像黑色电工胶带,但是不是粘的哈。程序在那卷纸带是是一排排小孔。
 
那卷打孔纸带像黑色电工胶带,但是不是粘的哈。程序在那卷纸带是是一排排小孔。


我理解的小孔就是二进制。
有孔的地方是1,没孔的地方是0
 
v2-3a45ce4aff79683d938022c8ad4e65a4_b.jpg

找到个纸带样子,哈哈。在这样的纸带上找错改编,程序猿是不是会晕倒?
 
我理解的小孔就是二进制。
有孔的地方是1,没孔的地方是0
我们用的也是类似楼上的纸袋穿孔,中间有一排,然后比如上1下2=A,上2下2=B...几十个密码,然后学生写程序,A=2,B=3,求A+B=,搞好多天老是通不过去。

瞪着眼睛找错,好多密码都背下来了。我当时想,为什么不能搞个读纸袋机器,把这些孔翻译出来:ABCD1234?这应当不是很难。
 
作者:知乎用户

打孔纸带编程本质上就是基于机器码的程序,虽然看起来很神秘但是其本质并没有什么难理解的。
看到你的标签里有写汇编,那么在这里假设你会一点汇编基础,讲个小例子好了
假定现在有一个CPU,其指令包括:
mov,add,and,or,xor,sub,shift,load,store,halt一共10个指令,对应的值分别是二进制的 0000 到 1001
同时,CPU带有8个寄存器(r),分别对应了二进制的 0000 到 0111(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
○○○○○○○○
.....
不全部写了,大概就是这个样子
打孔纸带的原理就是这个,在这之前和在这之后编程的核心思想其实都没有什么变化,或者说冯氏架构的基本编程思路都在其中了。


 
俺用过苹果老电脑,绿屏的,学校专人照顾电脑。
 
浏览附件1052415
找到个纸带样子,哈哈。在这样的纸带上找错改编,程序猿是不是会晕倒?
编译不通过,在最后打印出来的文本上会告诉你哪一行什么地方出错。 然后,你要修改程序,把改正的那几行重新穿孔到纸带子上,再把原来的纸带子错误的部分剪掉,把新的正确的用胶水粘上,再交给机房重新编译。
 
编译不通过,在最后打印出来的文本上会告诉你哪一行什么地方出错。 然后,你要修改程序,把改正的那几行重新穿孔到纸带子上,再把原来的纸带子错误的部分剪掉,把新的正确的用胶水粘上,再交给机房重新编译。
排一次机时,穿孔机时都可能要几天,剪贴还很容易不合格,所以2+3总是算不出来。
 
排一次机时,穿孔机时都可能要几天,剪贴还很容易不合格,所以2+3总是算不出来。
记得我的第一个程序是算 Pi 值,用一个无穷级数逼近 pi。精确到小数点后六位, pi = 3.141593. :)
 
学生时期第一个程序输入1+1得2而非11,最后一个做一小编译器,全还老师了
 
后退
顶部
首页 论坛
消息
我的