当前位置: 首页 > news >正文

[架构之路-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 系统调用

  

  

  

  

相关文章:

  • 【Web开发】Python实现Web服务器(Django)
  • matlab与python编程对照
  • 搞懂Nginx+keepalived实现双机热备,Nginx服务的高可用
  • YOLOV5通道剪枝【附代码】
  • 【Vuex】vue状态机详解
  • 使用 shell 脚本二进制部署 k8s 环境 [支持 docker 和 containerd]
  • windows 和 ubuntu 系统区别
  • Docker基础:Dockerfile相关知识介绍
  • Elastic实战:canal自定义客户端,实现mysql多表同步到es
  • R语言dplyr包select_if函数筛选dataframe数据中的所有因子类型变量(筛选所有的因子数据列、is.factor)
  • LVC | 一种简单的小样本目标检测方法
  • TypeScript 贪吃蛇游戏详细教程
  • 无需内嵌代码的全新GUI截图方案在TouchGFX,ThreadX GUIX,emWin,LVGL,AWTK全部测试通过,含多缓冲方式玩法
  • 【信息科学技术与创新】机器学习 深度学习 人工神经网络相关分析
  • YOLO v7详解
  • [笔记] php常见简单功能及函数
  • create-react-app做的留言板
  • C语言笔记(第一章:C语言编程)
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • JavaScript学习总结——原型
  • Laravel 实践之路: 数据库迁移与数据填充
  • Web标准制定过程
  • 二维平面内的碰撞检测【一】
  • 回顾 Swift 多平台移植进度 #2
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 微信小程序开发问题汇总
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 小程序button引导用户授权
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • FaaS 的简单实践
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • ${ }的特别功能
  • %check_box% in rails :coditions={:has_many , :through}
  • (pytorch进阶之路)扩散概率模型
  • (rabbitmq的高级特性)消息可靠性
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)springboot教学评价 毕业设计 641310
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (全注解开发)学习Spring-MVC的第三天
  • (四)Android布局类型(线性布局LinearLayout)
  • (五)Python 垃圾回收机制
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 物件導向與老子思想 (OO)
  • (转)编辑寄语:因为爱心,所以美丽
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • ::before和::after 常见的用法
  • ?.的用法
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C#]C#学习笔记-CIL和动态程序集