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

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

✌ 作者简介:小明的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寄存器:出栈,用一个寄存器接收出栈的数据

相关文章
|
5月前
|
存储 编译器 芯片
【读书笔记】汇编语言(第四版)第一章 基础知识
【读书笔记】汇编语言(第四版)第一章 基础知识
|
6月前
|
安全 编译器 程序员
读书笔记——《高质量 C++/C 编程指南》(1)
读书笔记——《高质量 C++/C 编程指南》(1)
读书笔记第六讲:马太效应
读书笔记第六讲:马太效应
|
Unix 程序员 C语言
《高质量C/C++编程》读书笔记二
《高质量C/C++编程》读书笔记二
60 0
|
人工智能 BI C语言
编程题-C 语言程序设计
10.求年份:输出 2000(含 2000)-2020(含 2020)之间所有的闰年年份。 #include <stdio.h> void main() { int y; for (y = 2000; y <= 2020; y++) if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) printf("%d,", y); } 11.求数字:求两个整数的最大公约数及最小公倍数。 #include <stdio.h> /* 最大公约数 */ int gcd(int a, int b) { int t; if (a < b) { t
86 0
|
算法 C语言
c语言程序设计 编程题
8.求年龄:有 5 个人坐在一起,问第 5 个人多少岁,他说比第 4 个人大 2 岁。问 第 4 个人多少岁,他说比第 3 个人大 2 岁。问第 3 个人多少岁,他说比第 2 个 人大 2 岁。问第 2 个人多少岁,他说比第 1 个人大 2 岁。最后问第 1 个人,他 说是 10 岁。请问第 5 个人多大? #include <stdio.h> int age(int n) { if (n == 1) return 10; return age(n - 1) + 2; } void main() { printf("%d", age(5)); } 9.猴子吃桃问题:猴子第一天摘下若干个
102 0
|
机器学习/深度学习 C语言
c语言程序设计 编程题
20.求数字:输出 100(含 100)-200(含 200)以内的满足以下条件的数,条件 为:这个数与 3 的和是 5 的倍数,与 3 的差是 6 的倍数,输出这样的数。 #include <stdio.h> void main() { int i; for (i = 100; i <= 200; i++) if ((i + 3) % 5 == 0 && (i - 3) % 6 == 0) printf("%d,", i); } 21.求数字:找出乘积为 399 的两个相邻奇数。 #include <stdio.h> void main() { int i = 1; whil
143 0
|
机器学习/深度学习 自然语言处理 算法
【转]最大熵模型:读书笔记
假期梳理了之前在新浪博客的文档,将一些有用的内容搬到这里。本文是关于最大熵的读书笔记。
315 0
【转]最大熵模型:读书笔记
《反本能》读书笔记
        作者的读书笔记,串成一本书,基本都是心理学的知识。         自我提升的障碍:人的本能是一种短视思维,消费短时的快乐而不是等待长时的快乐,表现为急功近利,急于求成,在学习新东西、认识陌生人的时候最容易体现出来,接触新的领域,本来原来的习惯已经养成,要接纳新的东西,开始就会比较困难,就像是已经盛了水的杯子,要装下新的饮料,自然装的少,而已还可能排斥,所以空杯心态经常被念及。
826 0
《出口成章》读书笔记
        这是老舍关于戏剧、小说、诗歌等写作的看法观点。写作的文体包括话剧、长篇小说、短篇小说,每种文体的篇幅、格式不一样,写作时要注意的重点都不一样。
1318 0