05 | 计算机指令:让我们试试用纸带编程
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了计算机指令的生成和执行过程,从早期计算机使用打孔卡编程的方式到现代计算机指令的生成过程。文章首先介绍了早期计算机程序是如何通过打孔卡来表示指令和数据的,以及为什么计算机需要使用机器码来执行程序。接着,文章解释了CPU作为计算机的大脑,执行各种计算机指令的逻辑机器。然后,文章介绍了不同CPU支持不同的指令集,以及程序指令存储在存储器中的存储程序型计算机。最后,文章详细解释了从高级语言到汇编代码,再到机器码的转换过程,帮助读者了解程序最终是如何变成CPU可以执行的计算机指令。通过本文,读者可以深入了解计算机指令的生成和执行过程,从而更好地理解计算机工作原理。文章内容涵盖了计算机指令的基本概念、指令集的分类和机器码的生成方式,对于对计算机指令感兴趣的读者具有很高的参考价值。
《深入浅出计算机组成原理》,新⼈⾸单¥68
全部留言(135)
- 最新
- 精选
- lzhao机器码不是二进制吗?为什么gcc把汇编编译成16进制?
作者回复: l'hao同学你好,是二进制,16进制只是为了显示方便,毕竟一串0和1在显示上太没有效率了
2019-05-031177 - 周曙光爱学习指令和机器码的关系是?可以理解为cpu指令类似数学公式,我们写的程序在套用这些公式,然后公式+参数生成机器码?
作者回复: 👍,周曙光爱学习同学你好,这个理解和比喻很形象
2019-05-0951 - coder老师您好,说到指令,让我想起来困惑我本科时期很久的一个问题: 用C或者其他的高级语言可以实现更多的语言,那么这么一直追问下去,就有个类似蛋生鸡的问题,第一个编程语言是怎么来的? 编程语言一般会有"自举"的功能,那么自举是怎么实现的?比如说Go语言就是自己实现自己,那么在没有Go编译器的基础上,怎么做到自己编译自己的?
作者回复: json同学你好,第一台计算机ENIAC,如果你去计算机历史博物馆看一下真机就会明白,他的各种输入都是一些旋钮,可以认为是类似用机器码在编程,后来才有了汇编、C这样越来越高级的语言。 编程语言是自举的,并不需要第一个编译器就是用自己这个语言来写的。通常是先有了别的语言写好的编译器,然后再用自己来写自己语言的编译器。 更详细的关于鸡蛋问题,可以直接看Wikipedia上,讲了多种这个问题的解决方案 https://en.wikipedia.org/wiki/Bootstrapping_(compilers)
2019-05-05550 - 奕我们说过,不同的 CPU 有不同的指令集,也就对应着不同的汇编语言和机器码 这句话中,在不同的指令集中 汇编语言和机器码 的关系是怎么对应的呢? 还有一个问题就是在高级语言转换为机器码的时候 是不是要读取CPU的具体的型号呢? 然后在转换为 对应CPU型号的机器码。 如果是,那么物理机器是不是要维护一个很大的对应关系表???
作者回复: 一步同学你好, 不同指令集里,对应的汇编代码会对应这个指令集的机器码呀。 大家不要把“汇编语言”当成是像C一样的一门统一编程语言。 “汇编语言”其实可以理解成“机器码”的一种别名或者书写方式,不同的指令集和体系结构的机器会有不同的“机器码” 高级语言在转换成为机器码的时候,是通过编译器进行的,需要编译器指定编译成哪种汇编/机器码。 物理机自己执行的时候只有机器码,并不认识汇编代码。 编译器如果支持编译成不同的体系结构的汇编/机器码,就要维护很多不同的对应关系表,但是这个表并不会太大。以最复杂的Intel X86的指令集为例,也只有2000条不同的指令而已。
2019-05-04532 - 二星球老师您好,我想问一个问题,C语言>汇编语言>机器语言 一般是这样的编译顺序,为什么不是 C语言>机器语言 一步到位这样编译呢?
作者回复: 杨怀同学你好,其实有一步到位的,就是两个步骤都通过一个命令先后执行,顺序完成,gcc现在就可以一个命令直接变成可执行的binary。 只是为了方便debug,你可以认为通过机器语言我们也可以反推出汇编语言长什么样子。
2019-05-0428 - Ant最后的卡片 02324020 ,为啥不是从最底下或最上面开始, 为啥3 打了俩孔, 为啥4 又 往上了一行
作者回复: 顺序是根据用什么样的机器读取来的,我们这里假设就是从左往右一列一列读取的。 一列卡片代表一个数,白色代表没有打孔,黑色代表打孔。3换算成二进制就是 0011,也就是上面两个不打孔,下面两个打孔,4就换算成 0100,也就是第二个打孔,其他的不打孔
2019-05-10227 - 梨子🍐没有理解 `0X02324020` 是如何计算出来的?
作者回复: 梨子同学你好,你把把上一行的二进制,四位四位一读,每四位当成是一个16进制数,就会得到这个结果
2019-05-03719 - ginger看到指令,联想到上一讲的cpu性能和指令数的关系,这里想提问下: 是否可以通过将指令更加细分(功能上的细分,比如指令ab完成a+b,指令abc完成a+b+c) 来实现一个高级语言本身需要对应到10条指令时候,变成了只需要对应7条指令的效果, 我想这个一定是可行的,但应该没什么意义,因为cpu的指令集,发展了这么多年了,应该也是没有优化的空间了吧.
作者回复: 可以的,这个就是历史上的CISC和RISC的争论。 其实指令集都在不断更新微调。而体系结构最近RISC-V又火起来了。 因为纯粹靠提升频率硬件的方法已经没有什么空间了,所以其实又进入了优化指令集乃至整个体系结构的阶段了。
2019-05-2416 - 寇云有幸去了山景城的计算机历史博物馆,对老师讲的课程非常有感觉
作者回复: 👍,我也去了,那个地方超棒,我决定明年再去呆一天。
2019-05-20313 - Nevermore老师shell脚本是一步编译成机器码的吗?还是转换成汇编再编译成机器码
作者回复: 如果在这个映射关系里面,可以认为shell脚本是被bash解释器来运行的,调用对应的编译好的二进制可执行文件相当于bash解释器在做对应的“翻译”动作
2019-05-1212