【好书解读】解读《汇编语言》一书

简介: 学习汇编语言的目的就是通过汇编语言进行深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。

✌ 作者简介:小明的Java问道之路,某大型金融互联网公司,后端研发高级工程师,擅长订单/交易领域的高安全/可用/并发/性能的架构设计与落地,专注于研究计算机底层与金融科技领域技术

🏆 CSDN博客专家/Java领域新星创作者、系统架构设计师

🔥 如果此文还不错的话,还请关注、点赞、收藏三连支持一下博主

本文导读学习汇编语言的目的就是通过汇编语言进行深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。

学习汇编语言的目的就是通过汇编语言进行深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。


一、汇编语言、机器语言与冯诺依曼体系结构

机器语言,就是0100110的二进制串

image.png


汇编语言,用来于硬件沟通,是英文代码

冯诺依曼体系结构:

1、运算器:运算单元,保存临时数据

2、控制器:控制单元

3、输入输出

4、存储器:寄存器组,用来保存指令和数据(为了加快运行速度)。寄存器按功能命名


image.png

EAX: Accumulator for operands and results data 操作数和结果数据累加器

EBX: Pointer to data in the DS segment 指向DS段中数据的指针

ECX: Counter for string and loop operations字符串和循环操作的计数器

EDX: I/O pointer I0指针

ESI: Pointer to data in the segment pointed to by the DS register; source pointer for string operations 指向DS寄存器所指向段中数据的指针,,字符串操作原指针

EDI: Pointer to data (or destination) in the segment pointed to by the ES register; destination pointer for string operations 指向ES寄存器所指向段中数据的指针,字符串操作目标指针

ESP: Stack pointer (in the SS segment) 栈指针( SS段中)

EBP: Pointer to data on the stack (in the SS segment) 指向栈上数据的指针( SS段中)

image.png


在计算机初创时代,涉及到一个问题?基础存储单元多少位最合适?8位,所以在8086时代,一个通用寄存器占16位, 8080时代是8位。 为了兼容8080,16可以拆位两个8位,同理32位可以拆违两个16位。ax(al低8位ah高8位) e(extra)ax (高16位低16位) rax=16 32 64,数据是从高到低还是低到高引入了字节序。


二、汇编语言相关硬件结构

汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。在本节中,对硬件系统结构的问题进行探讨

存储器:CPU是计算机的核心部件,它控制整个计算机的运作并进行运算,要想让一个CPU 工作,就必须向它提供指令和数据。指令和数据在存储器中存放,也就是平时所说的内存。磁盘不同于内存,磁盘上的数据或程序如果不读到内存中,就无法被CPU使用。

存储器相当于语言中的数组,下标从0开始,每一个元素为1字节;

image.png


寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。

CPU对存储器的读写:CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行三类信息的交互:一、我要干啥:读还是写命令(控制信息);二、我要的东西在哪:地址总线,存储单元的地址(地址信息);三、我的东西要放哪:数据总线,读或写的数据(数据信息)

那么CPU是通过什么将地址、数据和控制信息传到存储芯片中的呢?电子计算机能处理、传输的信息都是电信号,电信号要用导线传送。

在计算机中专门有连接CPU和其他芯片的导线,通常称为总线,物理上是一根根导线的集合,逻辑上分为地址总线、数据总线、控制总线

image.png


内存地址空间:一个CPU的地址线宽为10,那么可以寻址1024个内存单元,这1024个内存单元就构成CPU的内存地址空间。CPU对存储器进行读写的时候都通过控制总线发出读写命令。

对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。

主板:PC机有一块主板,主板有核心器件和主要器件,这些器件通过总线(地址总线、数据总线、控制总线)相连


三、CPU工作原理(寄存器)

CPU概述:一个类型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线连接,内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。

寄存器概述:8086CPU所有的寄存器都是16位的,可以存放两个字节。8086CPU有14个寄存器,AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

CS和IP是8086CPU中最关键的寄存器,他们知识了CPU当前要读取指令的地址

CS:代码段寄存器(存放段地址,一个段寄存器16位、一个PC计数器是16位),IP代码段+IP偏移=指令地址

IP:指令指针寄存器(存放指针的偏移地址)

AX、BX、CX、 DX通常用来存放一般性数据被称为通用寄存器。

DS:寄存器,通常用来存放要访问的数据的段地址。

SS、 SP指示栈顶:改变SP后写内存的入栈指令;读内存后改变SP的出栈指令。

SI和DI是8086CPU中和bx功能相近的寄存器,SI和DI不能够分成两个8位寄存器来使用。

8086PC工作过程

1、从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;2、IP= IP +所读取指令的长度,从而指向下一条指令;3、执行指令,跳转1并重复


四、一些简单地汇编指令

mov指令的几种形式:

mov 寄存器,数据

mov 寄存器,寄存器

mov 寄存器,内存单元

mov 内存单元,寄存器

mov 段寄存器;寄存器

push寄存器:将一个寄存器中的数据入栈

pop寄存器:出栈,用一个寄存器接收出栈的数据

相关文章
|
7月前
|
存储 人工智能 算法
【C语言】自学终极笔记
【C语言】自学终极笔记
110 0
|
网络协议 Linux Android开发
年前Get一个知识点|想学嵌入式开发,要学的具体有什么?​
年前Get一个知识点|想学嵌入式开发,要学的具体有什么?​
|
6月前
|
存储 程序员 存储控制器
【读书笔记】汇编语言(第四版)第二章 寄存器
【读书笔记】汇编语言(第四版)第二章 寄存器
|
6月前
|
存储 编译器 芯片
【读书笔记】汇编语言(第四版)第一章 基础知识
【读书笔记】汇编语言(第四版)第一章 基础知识
|
C语言
C语言*小白的探险历程
C语言*小白的探险历程
[课后习题]C Primer Plus【第六版】编程练习 第一章
[课后习题]C Primer Plus【第六版】编程练习 第一章
【C语言】刷题训练营 —— 每日一练(十三)
前言 大家好,继续更新专栏 c_牛客,好久没更新了,牛客篇卷土重来了,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解,希望要学习的小伙伴能先思考再看答案,这样学习效率倍增,如有哪里不足还请评论区留言或私信我,如果有不懂或者疑惑的地方也可以留言或者私信我。
|
存储 Java C语言
【C初阶】第一篇——初识C语言(万字篇,带你敲响C语言的大门)(一)
【C初阶】第一篇——初识C语言(万字篇,带你敲响C语言的大门)
【C初阶】第一篇——初识C语言(万字篇,带你敲响C语言的大门)(一)
|
Java 程序员 编译器
C语言程序设计教程任务;初步认识C语言,携君之手,步入编程之路。
C语言程序设计教程任务;初步认识C语言,携君之手,步入编程之路。
122 0
C语言程序设计教程任务;初步认识C语言,携君之手,步入编程之路。
|
编译器 开发工具 C语言
震惊!三更编程的第一堂C语言入门课程~
震惊!三更编程的第一堂C语言入门课程~
231 0
震惊!三更编程的第一堂C语言入门课程~