[架构之路-22]:目标系统 - 系统软件 - 汇编语言的结构与X86指令系统以及CPU的工作原理、函数调用与堆栈操作
目录
前言:
第1章 结构化程序与分层编程系统
1.1 程序的经典框架:算法+数据结构
1.2 程序的结构化框架
1.3 程序的层次模型
1.4 程序设计的层次模型
第2章 汇编语言概述
2.1 指令系统编程的困境
2.2 什么是汇编语言
2.3 编程语言的本质
2.4 汇编语言的本质
第3章 X86汇编程序的结构
3.1 概述
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 堆栈的基本操作 编辑
8.2 函数调用时通过堆栈保存现场
8.3 函数调动时通过全局寄存器传递参数
8.4 函数调动时通过全局数据区传递参数
8.5 通过堆栈区传递参数
8.6 函数返回值的传递方式
第9章 汇编语言的调试
9.1 编译调试环境
9.2 debug命令
9.3 系统调用
前言:
汇编语言,又称为低级编程语言,在计算机发展的初期,程序员是通过汇编语言来进行编程的。当然,现代编程,无论是操作系统程序,还是应用程序,几乎不会再直接通过汇编语言进行编程了,只有在极个别的场合才会用到汇编语言,比如需要控制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 系统调用