高清logo网站,网站维护建设招标,2021免费网站大全,学校网站建设合同文章目录 前言1. 修改CS、IP的指令2. 问题分析:CPU运行的流程3. 代码段小结结语 前言 #x1f4cc; 汇编语言是很多相关课程#xff08;如数据结构、操作系统、微机原理#xff09;的重要基础。但仅仅从课程的角度出发就太片面了#xff0c;其实学习汇编语言可以深入理解计… 文章目录 前言1. 修改CS、IP的指令2. 问题分析:CPU运行的流程3. 代码段小结结语 前言 汇编语言是很多相关课程如数据结构、操作系统、微机原理的重要基础。但仅仅从课程的角度出发就太片面了其实学习汇编语言可以深入理解计算机底层工作原理提升代码效率尤其在嵌入式系统和性能优化方面有重要作用。此外它在逆向工程和安全领域不可或缺帮助分析软件运行机制并增强漏洞修复能力。 本专栏的汇编语言学习章节主要是依据王爽老师的《汇编语言》来写的和书中一样为了使学习的过程容易展开我们采用以8086CPU为中央处理器的PC机来进行学习。 文章主要内容修改CS、IP的指令以及代码段的学习
1. 修改CS、IP的指令
在CPU中程序员能够用指令读写的部件只有寄存器程序员可以通过改变寄存器中的内容实现对CPU的控制。
CPU从何处执行指令是由CS、IP中的内容决定的程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。
我们如何改变CS、IP的值呢
显然8086CPU必须提供相应的指令。我们如何修改AX中的值?可以用mov指令如mov ax, 123将ax中的值设为 123显然我们也可以用同样的方法设置其他寄存器的值如mov bx, 123mov cx, 123mov dx, 123等。其实8086CPU大部分寄存器的值都可以用mov指令来改变mov指令被称为传送指令。
但是mov指令不能用于设置CS、IP的值原因很简单因为8086CPU没有提供这样的功能。8086CPU为CS、IP提供了另外的指令来改变它们的值。能够改变CS、IP的内容的指令被统称为转移指令(我们以后会深入研究)。我们现在介绍一个最简单的可以修改CS、IP的指令jmp指令。
✍若想同时修改 CS、IP的内容可用形如“jmp段地址:偏移地址”的指令完成如 “ imp段地址:偏移地址”指令的功能为用指令中给出的段地址修改CS偏移地址修改IP。 ✍若想仅修改IP的内容可用形如“jmp 某一合法寄存器”的指令完成如 “jmp 某一合法寄存器”指令的功能为:用寄存器中的值修改IP。 jmp ax在含义上好似mov IP,ax。 ❗❗❗注意我们在适当的时候会用已知的汇编指令的语法来描述新学的汇编指令的功能。采用一种“用汇编解释汇编”的方法来使读者更好地理解汇编指令的功能这样做有助于读者进行知识的相互融会。要强调的是我们是用“已知的汇编指令的语法”进行描述并不是用“已知的汇编指令”来描述比如我们用mov IP,ax来描述jmp ax并不是说真有 mov IP,ax这样的指令而是用 mov指令的语法来说明jmp指令的功能。我们可以用同样的方法描述jmp 3:01B6的功能jmp 3:01B6在含义上好似mov CS,3 mov IP01B6。
2. 问题分析:CPU运行的流程
内存中存放的机器码和对应的汇编指令情况如下图所示设CPU初始状态CS2000HIP0000H请写出指令执行序列。思考后看分析。 分析如下 3. 代码段
前面讲过对于8086PC机在编程时可以根据需要将一组内存单元定义为一个段。我们可以将长度为NN≤64KB的一组代码存在一组地址连续、起始地址为16的倍数的内存单元中我们可以认为这段内存是用来存放代码的从而定义了一个代码段。比如将: 这段长度为10个字节的指令存放在123B0H-123B9H的一组内存单元中我们就可以认为123B0H-123B9H这段内存是用来存放代码的是一个代码段它的段地址为123BH长度为10个字节。
如何使得代码段中的指令被执行呢? 将一段内存当作代码段仅仅是我们在编程时的一种安排CPU并不会由于这种安排就自动地将我们定义的代码段中的指令当作指令来执行。CPU 只认被CS:IP指向的内存单元中的内容为指令。所以要让CPU执行我们放在代码段中的指令必须要将CS:IP指向所定义的代码段中的第一条指令的首地址。对于上面的例子我们将一段代码存放在123B0H~123B9H内存单元中将其定义为代码段如果要让这段代码得到执行可设CS123BH、IP0000H。 小结
(1)段地址在8086CPU的段寄存器中存放。当8086CPU要访问内存时由段寄存器提供内存单元的段地址。8086CPU有4个段寄存器其中CS用来存放指令的段地址。
(2)CS存放指令的段地址IP存放指令的偏移地址。
8086机中任意时刻CPU将CS:IP指向的内容当作指令执行。
(3)8086CPU的工作过程
①从CS:IP指向的内存单元读取指令读取的指令进入指令缓冲器 ②IP指向下一条指令 ③ 执行指令。(转到步骤①重复这个过程)
(4)8086CPU提供转移指令修改CS、IP的内容。
结语
今天的分享到这里就结束啦如果觉得文章还不错的话可以三连支持一下。
也可以点点关注避免以后找不到我哦
Crossoads主页还有很多有趣的文章欢迎小伙伴们前去点评您的支持就是作者前进的动力