[架构之路-22]:目标系统 - 系统软件 - 汇编语言结构与X86指令系统以及CPU的工作原理函数调用与堆栈操作

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-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 系统调用

  

  

  

  

以上是关于[架构之路-22]:目标系统 - 系统软件 - 汇编语言结构与X86指令系统以及CPU的工作原理函数调用与堆栈操作的主要内容,如果未能解决你的问题,请参考以下文章

[架构之路-56]:目标系统 - 平台软件 - 总体架构概述

[架构之路-28]:目标系统 - 系统软件 - Linux OS内核功能架构图解内核构建内核启动流程

[架构之路-25]:目标系统 - 系统软件 - bootloader uboot内存映射与启动流程

[架构之路-21]:目标系统 - 系统软件 - 计算机系统架构计算机指令系统结构化程序与分层编程。

[架构之路-29]:目标系统 - 系统软件 - Linux OS内核以及内核驱动的调试技术

[架构之路-26]:目标系统 - 系统软件 - bootloader uboot使用方法常用命令