许式伟的架构课
许式伟
七牛云 CEO
84945 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 89 讲
许式伟的架构课
15
15
1.0x
00:00/00:00
登录|注册

03 | 汇编:编程语言的诞生

扩展性考虑
子系统设计
需求的变化点和稳定点
计算机的存储能力
BIOS的内容
最小功能集的计算机主板的ROM
函数地址和跳转目标地址的表达
内存地址的自动分配
文本符号表达机器指令
汇编语言的诞生
软件和硬件边界模糊
编程效率低下
CPU指令的二进制表示
架构上的思考题
可自我迭代的计算机
汇编语言的特点
编程的史前时代
程序的保存和加载
冯·诺依曼体系
汇编:编程语言的诞生

该思维导图由 AI 生成,仅供参考

你好,我是七牛云许式伟。
在上一讲中,我们一起解剖了架构大厦的地基:冯·诺依曼体系。接下来,我们就开始沿着这座大厦攀登,一起来聊聊编程语言。
对于现代计算机来说,虽然 CPU 指令是一个很有限的指令集,但是 CPU 执行的指令序列(或者叫“程序”)并不是固定的,它依赖于保存在存储中的数据,由软件工程师(或者叫“程序员”)编写的软件决定。
从上一讲中,我们可以知道,计算机的程序可能被保存在计算机主板的 ROM 上(这段程序也叫计算机的启动程序),也可能被保存在外置的存储设备(比如硬盘)上,并在合适的时机加载执行。
程序称得上是计算机的灵魂。指令序列的可能性是无穷的,程序的可能性就是无穷的。今天计算机创造的世界如此多姿多彩,正是得益于程序无穷的可能性。
那么,软件工程师是怎么编写程序的?

编程的史前时代

在第一门面向程序员的编程语言出现前,人们只能通过理解 CPU 指令的二进制表示,将程序以二进制数据方式刻录到存储(比如 ROM 或硬盘)上。
这个时期的编程无疑是痛苦的,效率是极其低下的:且不说我们怎么去修改和迭代我们的程序,光将我们的想法表达出来就极其困难。
我们首先要把表达的执行指令翻译成二进制的比特数据,然后再把这些数据刻录到存储上。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

汇编语言的诞生标志着编程成为了一个纯软件行为,程序员这一分工也由此诞生。在汇编语言出现之前,人们只能通过理解CPU指令的二进制表示,将程序以二进制数据方式刻录到存储上,这导致编程效率极低。汇编语言的出现让编程成为一个纯软件行为,人们可以反复修改程序,然后通过汇编编译器将其翻译成机器语言,并写入到外置的存储设备。汇编语言通过使用文本符号表达机器指令、内存地址、函数地址和跳转目标地址,解放了人们从物理硬件地址中,以便专注于程序逻辑的表达。汇编语言的出现为计算机的存储能力打开了大门,使得软件程序不断被传承、演进发扬光大。在没有操作系统之前,最早期的计算机可能包含了外置存储设备的驱动程序、基础外部设备的驱动程序、汇编语言的编辑器、编译器以及把程序的源代码写入磁盘、从磁盘读入的能力。这一步非常重要,计算机的存储能力的重要性如同人类发明了纸。纸让人类存储了知识,一代代传递下去并不断演进,不断发扬光大。而同样有了存储能力的计算机,我们的软件程序就会不断被传承,不断演进发扬光大,并最终演进出今天越来越多姿多彩的信息科技的世界。 本文介绍了汇编语言的重要性和影响,以及它对计算机存储能力的贡献。汇编语言的出现标志着编程成为了一个纯软件行为,极大地提高了编程效率,使得软件程序得以不断传承、演进发扬光大。文章还提到了在没有操作系统之前,计算机存储能力的重要性,类比于人类发明纸的重要性。这篇文章深入浅出地阐述了汇编语言的重要性,对读者有很好的启发和思考意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(99)

  • 最新
  • 精选
  • LiuMei
    存储让数据跨越时间,(今天存储明天读取)传输让数据跨越空间,计算让数据改变形式。时空一体,那么存储和传输可能也是统一的

    作者回复: 👍

    2019-05-06
    2
    75
  • 晓凉
    系统要与外部世界交互,就应该有输入和输出的能力(黑洞是否只有输入没有输出);作为人造系统,主要的交互对象是人,所以针对人类的输入输出能力就更重要,显示器和键盘就是这个角色;存储和计算能力是系统智能的核心,决定了系统如何用输入输出与外部世界交互;系统需要有演化能力,初期只能人类帮助演化(编程语言、编辑器、编译器),足够智能后才能自我演化。

    作者回复: 总结很赞

    2019-04-24
    67
  • 叶建盟(James)-西安交大
    我要做一个最小机器人系统,需要考虑需求的变化点和稳定点。 该怎么考虑呢?

    作者回复: 挺典型的问题。这个问法是一种典型的需求陈述误区。描述需求需要有几个典型的要素:1、用户,面向什么人群;2、他们有什么要解决的问题;3、我解决这个问题的核心系统。只有满足这几个要素的需求才能进一步讨论变化点和稳定点。最小机器人可能符合上面的3,但是用户人群和要解决的问题没有描述,也就无法进一步去思考到底哪些因素是稳定的,哪些是易变的。

    2019-04-25
    2
    60
  • 宁静致远
    许老师,自己现在已经工作快三年了,想往架构师这个方向走,但现在自己有些迷茫,接触到的技术也算挺多了,但不知道该如何入手架构师,之前您也提到过先广度然后深度,但我想问达到什么算广度够了,怎么进行深度学习

    作者回复: 架构师核心是把知识串起来,构建一个完整的认知,不留疑惑。大部分知识是不需要深入细节的,只在你需要的时候深入,但深入的时候要很深

    2019-04-25
    3
    32
  • 拒绝
    大佬,以前并没有架构方面的经验,以至于看您的文章,没有感觉了,就光看了一遍,脑子里没有引发共鸣,作为业界大佬的您,有什么好的指导与建议吗?

    作者回复: 根据文章的脉络,看看能不能串起来,加深了对这个信息世界如何构建的理解,如果没有,欢迎把问题抛出来讨论

    2019-04-23
    7
  • 汇编语言是机器思维与人思维桥梁。 存储让复杂任务成了可能,让机器经验像知识一样传承下去。

    作者回复: 挺好的总结

    2019-04-29
    4
  • 若飞
    对 CPU 指令来说,函数只有地址没有名字。请问老师,这句话怎么理解??

    作者回复: cpu调用函数的指令是“call 函数地址”,而不是“call 函数名”。对cpu而言,函数没有函数名,这是高级语言为了逻辑表达方便而加的

    2019-04-27
    4
  • Geek_88604f
    汇编语言如何提升编程效率:通过符合减轻了记忆的负担;通过符号解耦了逻辑程序与物理内存(系统自动分配内存,通过变量访问);通过文本表示一段指令的集合(函数),有了基本的结构化思想,可以复用;通过符号来初步表达控制流。 本质上来讲,键盘和显示器的驱动程序、外置存储驱动、汇编程序编辑器和编译器、执行保存在外存中的代码,都是程序或指令序列。因此稳定点是指令的执行能力。 变化点:键盘和显示器的驱动程序(可能还有语音、姿态等交互方式,需求可以收敛到对端口的访问)、外置存储驱动(软盘、光盘、U盘、磁盘,需求可以收敛到对端口的访问)、汇编程序编辑器和编译器(正常的功能演进,缺陷修复都会导致版本变化,厂商会以光盘或软盘的形式发布,因此需求需要收敛到文件系统)、执行保存在外存中的代码(代码也需要通过文件来管理)。

    作者回复: 👍

    2022-11-08归属地:新加坡
    1
  • 木木
    感觉学习操作系统,编译原理等那些大头的东西,从需求的角度去学,会有更深的理解,也更容易理解。

    作者回复: 是这样

    2021-06-24
    1
  • 梦朝思夕
    java并不是纯面向对象编程语言,它有着基本类型不属于对象

    作者回复: 您说的对

    2019-05-14
    1
收起评论
显示
设置
留言
99
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部