目录
前言:
汇编语言,又称为低级编程语言,在计算机发展的初期,程序员是通过汇编语言来进行编程的。当然,现代编程,无论是操作系统程序,还是应用程序,几乎不会再直接通过汇编语言进行编程了,只有在极个别的场合才会用到汇编语言,比如需要控制CPU内部寄存器的状态,主要是在系统软件的初始化的一开始阶段。一般情况下,硬件系统的软件启动流程的源代码,是从汇编语言代码开始的,比如uboot最初的初始化CPU的源代码,就是以汇编语言的形式存在的;另外,汇编语言对于理解CPU代码的执行和计算机的底层工作原理非常有帮助。因此,在正式介绍uboot之前,有必要先熟悉一下汇编语言与CPU的指令系统。
第1章 结构化程序与分层编程系统
1.1 程序的经典框架:算法+数据结构
数据结构(structure)是:计算机存储、组织数据的方式。
算法(Algorithm)是:指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
1.2 程序的结构化框架
1.3 程序的层次模型
1.4 程序设计的层次模型
设计一个程序或软件系统,自底向上的方法有:
(1)二进制指令系统
(2)低级编程语言:汇编
(3)高级编程语言:C/C++/Python
(4)标准库:第三方提供的常见的功能
(5)常见的设计模式
(6)特定业务应用的程序框架
(7)特定业务的应用程序
(8)UML图形化语言描述
每个层次,都包含程序的两个重要方面:算法+数据结构。
第2章 汇编语言概述
2.1 指令系统编程的困境
二进制指令,称为第一代计算机语言。
2.2 什么是汇编语言
汇编语言, 即第二代计算机语言,用一些容易理解和记忆的缩写单词来代替一些特定的指令,例如:用"ADD"代表加法操作指令,"SUB"代表减法操作指令,以及"INC"代表增加1,"DEC"代表减去1,"MOV"代表变量传递等等。通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。
2.3 编程语言的本质
2.4 汇编语言的本质
(1)软件工程
- 各种伪指令:如何组织程序
(2)数据结构
- 结构化数据定义:如何组织数据
(3)算法
- 数据搬运:如何操作数据
- 数据运算:如何运算数据
- 程序控制:如何控制程序
第3章 X86汇编程序的结构
3.1 概述
(1)数据段Data
- 初始化的数据: 初始的全局变量
- 未初始化的数据:未初始化的全局变量
- 堆heap:malloc的内存或数据
- 栈stack:函数的局部变量
(2)代码段Text:只读
3.2 定义代码段:code标志
3.2 定义数据段:data标志
3.3 定义堆栈段:stack标志
3.4 定义程序的入口:start标志
3.5 定义子程序: PROC标志
3.6 定义程序结束:ends标志
3.7 汇编代码的组织:伪指令
第4章 汇编语言结构化数据表示
4.1 数据表示
4.2 数据类型
4.3 数据属性:正负、编码属性
4.4 数据属性:空间属性
4.5 数据属性:时间属性
4.6 数据属性:访问属性
第5章 汇编语言结构化数据定义
5.1 全局变量定义
5.2 全局常量定义
5.3 数据的标识:有名与无名
5.4 数据内存空间的分配:变量、常量、堆栈
5.5 数据内存空间的释放
第6章 汇编语言结构化数据操作
6.1 汇编语言符号
6.2 数据的搬移
6.3 数据的运算
第7章 程序的控制
7.1 汇编语言符号
7.2 CPU控制指令
7.3 程序控制指令
7.4 无条件转移
7.5 有条件转移
7.6 条件循环
7.7 子程序跳转
第8章 函数调用与堆栈变换
8.1 堆栈的基本操作
(1)压栈:push =》SP - 2
(2)出栈:pop =》SP + 2
8.2 函数调用时通过堆栈保存现场
8.3 函数调动时通过全局寄存器传递参数
8.4 函数调动时通过全局数据区传递参数
8.5 通过堆栈区传递参数
8.6 函数返回值的传递方式
第9章 汇编语言的调试
9.1 编译调试环境
9.2 debug命令
9.3 系统调用