- 在第一门面向 程序员 的编程语言出现前,只能通过理解 CPU指令的二进制表示 ,将程序以 二进制数据的方式 刻录到存储上
- 这个时期, 编程的效率极其低下 ,软件和硬件的边界还非常 模糊 ,把程序刻录到存储上往往还涉及到硬件的 电气操作
汇编语言
- 为了解决 编程效率 的问题,诞生了汇编语言(和解释它的编译器)
- 汇编语言的编译器将汇编语言写的程序编译成 CPU指令序列 ,并将其保存到 外置存储 上
- 汇编语言 非常接近 计算机的CPU指令,一条汇编指令基本和一条CPU指令 一一对应
意义
- 汇编语言的出现,让编程成为了一个 纯软件 行为
- 程序员可以 反复修改 汇编程序,然后通过汇编编译器将其翻译成机器语言,并写入到外置存储中
效率优化
-
用 文本符号
表达 机器指令
- 例如add表示加法运算,而不用记忆对应的CPU指令的二进制表示
-
用 文本符号
表达要操作的 内存地址
,并支持 内存地址的自动分配
- 例如使用了一段文本Hello,那么汇编编译器将为程序开辟一段 静态存储区 (数据段)来存放这段文本
- 并用一个文本符号(变量名)指向它,用 变量名 去表达一段内存数据
- 这样就 不用关注内存的物理地址 ,而把精力放在程序的逻辑表达上
-
用 文本符号
表达要调用的 函数地址
- 对 CPU指令 来说, 函数只有地址没有名字
- 从 编程 的角度来说, 函数是机器指令的扩展
- 和机器指令需要用文本符号助记一样,函数的名称也需要用文本符号来助记
-
用 文本符号
表达要 跳转的目标地址
- 在高级语言里,流程控制的语法很多,例如goto/if/else/for/while/until等
- 在 汇编语言 里,只有两个基本的跳转指令:无条件跳转( jmp )和条件跳转( je/jne )
- 同样,跳转的目标地址用文本符号有助于程序逻辑的表达,而无需把精力放在具体的指令跳转地址上
-
小结
- 汇编从 指令能力 上来说,和 机器指令 是 一致 的
- 汇编把人们从 物理硬件地址 中解脱出来, 专注于程序逻辑的表达
MVP
- 键盘和显示器的驱动程序
- 当时最主流的外置存储设备的驱动程序
- 汇编程序 编辑器 :可以从存储中读取汇编程序代码,修改并保存到存储中
- 汇编程序 编译器 :可以将汇编代码编译成机器代码,并保存在存储中
- 执行机器代码的程序:可以执行一段保存在外置存储设备中的机器代码
汇编与操作系统
- 汇编程序的出现要 早于 操作系统
- 操作系统的 核心目标 是 软件治理 ,只有在计算机需要管理很多任务时,才需要操作系统
转载请注明出处:http://zhongmingmao.me/2019/04/23/architecture-assembly-language/
访问原文「架构 -- 汇编语言」获取最佳阅读体验并参与讨论
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- iOS汇编入门教程(一)ARM64汇编基础
- iOS 汇编入门教程(一):ARM64 汇编基础
- iOS汇编入门教程(三)汇编中的 Section 与数据存取
- iOS汇编入门教程(二)在Xcode工程中嵌入汇编代码
- 汇编语言8086笔记
- python编程(反汇编)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Viral Loop
Adam L. Penenberg / Tantor Media / 2009-10-27 / USD 34.99
From Google to Facebook, a respected journalist delves into how a "viral loop" can make an online business a success.一起来看看 《Viral Loop》 这本书的介绍吧!