汇编语言之寄存器(CPU工作原理)

1、介绍

一个典型的CPU,由运算器、控制器、寄存器等器件组成,对于游戏修改者来说,重点学习寄存器,其它不必管。
不同的CPU,寄存器的个数、结构是不相同的,8086CPU有14个寄存器,每个寄存器有一个名称,我们对它进行分类:

1.通用寄存器:AX、BX、CX、DX

2.段寄存器:CS、SS、DS、ES

3.指针寄存器:SP、BP

4.变址寄存器:SI、DI

5.指令指针寄存器:IP

6.标志寄存器:FR

2、通用寄存器

AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。
以AX为例,寄存器的逻辑结构图如下:

字在寄存器中的存储字在寄存器中的存储

3 字在寄存器中的存储

4、物理地址

存储单元又叫内存单元,以后我们多数用内存单元这一名称。
所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地
址称为物理地址。
CPU通过地址总线送入内存的,必须是一个内存单元的物理地址,在CPU向地址总线上发出物理地址之前,必须要在内部先
形成这个物理地址,不同的CPU可以有不同的形成物理地址的方式,我们现在讨论8086CPU是如何在内部形成内存单元的物理
地址的。

5、 8086CPU给出物理地址的方法

8086CPU有20位地址总线,可以传送20位地址,而8086CPU内部结构是16位的,一次性只能传送16位的地址,怎么

解决20位地址与16位地址不一致的问题呢?8086CPU采用一种在内部用2个16位地址合成的方法来形成一个20位的物理地

址。

当8086CPU要读写内存时,怎样在CPU内部形成物理地址的呢?

1:CPU中的相关部件提供2个16位的地址,一个称为段地址,另一个称为偏移地址。

2:段地址和偏移地址通过内部总线送入一个称为地址加法器的部件。

3:地址加法器将这两个16位地址合成为1个20位的物理地址。

地址加法器采用“段地址×16+偏移地址”的方法合成物理地址。即:段地址×16+偏移地址=物理地址。

“段地址×16”可以理解为段地址的16倍,以下这个说法更好理解。

我们把16转化为十六进制10,然后计算一下。假设段地址=2A7,2A7×10=2A70,计算结果2A70相对于段地址2A7左

移了一位,所以,段地址×16可以理解为:段地址左移一位。

问答题:如果段地址=A100,偏移地址=42B,那么,物理地址=?

答:段地址×16=段地址左移一位,即A100左移一位=A1000,A1000+42B=A142B,所以,物理地址是:A142B。

8086CPU要访问地址为123C8H的内存单元,此时,地址加法器的工作过程如下图所示(图中数据皆为十六进制表示):

6  CS和IP

8086CPU在访问内存时,要由相关部件提供内存单元的段地址和偏移地址,然后送入地址加法器合成物理地址,那么,是什

么部件提供段地址呢?是段寄存器提供段地址。8086CPU有4个段寄存器:CS、DS、SS、ES,本章先讲解CS。

CS和IP是8086CPU中2个最为关键的寄存器,它们指示了CPU当前要读取指令的地址,我们看一下CE,可以看出在游

戏中,什么是CPU要读取的指令地址,见下图:


 

 

上图指令执行后,AX中的数值为0123H。那么,接下来就是读取、执行下一条指令 BB 03 00(mov bx,0003h)了。

CS和IP的重要性在于它们的数值提供了CPU要执行指令的地址。

在1.5节中,我们说过,在内存中指令和数据没有任何区别,都是二进制信息,CPU在工作的时候,把有的信息看作指令,

把有的信息看作数据,那么,CPU在什么时候把它看作指令?在什么时候把它看作数据呢?现在我们可以回答第一个问题了。

    答:只要内存单元(二进制信息)被CS:IP指向,那么,这些内存单元就会被CPU看作指令执行。

7  修改CS和IP的指令

Mov被称为传送指令,可以修改大部分寄存器的值。如:mov ax,123H,将ax中的值设为123H,同样地,我们可以mov
bx,2a4H  mov cx,5f0H  mov dx,b29H 等等。但是,mov不能修改CS和IP这两个寄存器的值,因为8086CPU没有提

供这样的功能。

要修改CS和IP的值,可以用jmp指令,事实上,还有一些指令是可以修改CS和IP的,这些指令被统称为转移指令,这

个在后面的课程会讲到,现在先学习这个最简单的转移指令:jmp。

若想同时修改CS和IP的值,可用形如“jmp 段地址:偏移地址”的指令完成。如:jmp 2ae3:9,执行后:CS=2ae3H,

IP=9H,CPU将从2ae39H处读取指令。

“jmp 段地址:偏移地址”指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP。

若想仅修改IP的值,可用形如“jmp 某一合法寄存器”的指令完成。如:jmp ax,执行前ax=437aH,CS=17f0H,IP=

423cH,执行后,CS不变,IP=437aH。

“jmp 某一合法寄存器”指令的功能为:用寄存器中的值修改IP。为什么叫“某一合法寄存器”?因为不是所有寄存器都可

以修改IP。


8 代码段

在编程时,可以根据需要,将一组内存单元定义为一个段。段分3种类型:代码段、数据段、栈段。

对于8086PC机,我们可以将长度为N(N≤64KB)的一组代码(机器指令和汇编指令),存在一组地址连续、起始地址为

16的倍数的内存单元中,我们将这一组内存单元定义为代码段。

比如,将:  机器指令        汇编指令

            B8 00 00       mov ax,0000H

            05 23 01       add ax,0123H

            8B D8          mov bx,ax

            FF E3          jmp bx

这段长度为10字节的指令,存放在123B0H~123B9H的一组内存单元中,我们就可以认为这是一个代码段。若要让CPU

执行这些指令,必须要将CS:IP指向代码段中第一条指令的首地址(123B0H)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学好英语网首页制作_没有美术基础的新手小白,如何学好淘宝美工?

没有美术基础的新手小白,如何学好淘宝美工?俗话说:万事开头难,没有任何基础、没有美术基础学淘宝美工,要怎么学习好呢?显然,作为一名没有美术基础的新手小白,一般开始学习的时候都是…

14岁上中科大,18岁攻读麻省博士,28岁成为哈佛最年轻副教授,“华人女天才”的开挂人生...

全世界只有3.14 % 的人关注了爆炸吧知识哈佛年纪最小的副教授是中国人1997年美国颁发的罗伯特里得奖获得者蔡天西,22岁获国际生物统计学协会颁发的极大成就"半参数随机"奖,28岁成为哈佛最年轻的女性副教授,香港、美国、著名学术刊物…

汇编语言之寄存器(内存访问)

1、内存中字的存储 2、ds和【address】 CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086CPU中,内存地址由段地址和偏移地址组成, 其中,段地址存放在段寄存器DS中,DS称作数据段寄存器。…

用sort()方法随机打乱数组

2019独角兽企业重金招聘Python工程师标准>>> 我们先看一下随机数组排序的示例,再来研究其中的原理。 随机数组排序示例 var numbers [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411]; numbers numbers.sort(function(…

Linux下部署Kubernetes+Kubesphere(一)Kubernetes基础

1.服务器规划为配置Kubesphere高可用集群,需要三台或三台以上机器作为Master节点,每台机器既可以作为Master也可以作为Worker节点。其中Master节点数量建议为单数。该示例中采用三台服务器,即作为Master节点也作为Worker节点,配置…

触发器及其应用实验报告总结_调机技巧总结: 先快后慢射胶法及其应用

戳我进入社区:注塑和模具人的网上家园先快后慢,也即先用一级快速射胶,射到某个设定的位置时,再起二级慢速射胶。这个二级起级点一般是设在射胶充型的后期,也即接近充型结束的位置。使用一级快速射胶,可以保…

使用 dotnet-monitor 在 Kubernetes 中收集 .NET metrics

使用 dotnet-monitor 在 Kubernetes 中收集 .NET metricsIntrodotnet-monitor 是微软推出的一个帮助我们诊断和监控 .NET 应用程序的工具,在 Kubernetes 中我们可以让 dotnet-monitor 作为 sidecar 运行,无侵入地监控 .NET 应用,今天我们就来…

arcgis 分区 属性值_ArcGIS制图之Maplex自动点抽稀

制图工作中,大量密集点显示是最常遇到的问题。其特点是分布可能不均匀、数据点比较密集,容易造成空间上的重叠,影响制图美观。那么,如果美观而详细的显示制图呢?主要原理Maplex中对标注有很好的显示控制,一…

学术造假导致导师自杀,后将这段学术丑闻经历出书贩卖,一年收入上百万......

全世界只有3.14 % 的人关注了爆炸吧知识本文转自募格学术2020年2月11日,小保方晴子又被撤回了一篇研究论文。Tissue Engineering Part A撤稿给出的原因是:通过哈佛医学院正式调查后,无法确实其实验结果的准确性,尽管作者本人坚持已…

汇编语言之数据处理的2个基本问题

1、bx、si、di和bp Bx、si和di这3个寄存器我们已经学过了,现在进行一下总结,并学一下bp。 1:在8086CPU中,只有这4个寄存器可以用在[…]中来进行内存单元的寻址。比如,下面的指令都是正确 的…

nvm用标准sata ahci码_能者多劳!让NVMe固态硬盘做系统盘的同时,加速SATA数据盘...

不知不觉当中,固态硬盘已经取代机械硬盘成为主流。越来越多的玩家已经淘汰机械盘,使用NVMeSATA的固态硬盘高低搭配。既然是高低搭配,就一定会有性能差距,是否能从NVMe固态硬盘中划分出一小部分空间来给SATA固态硬盘加速&#xff0…

天了噜!定义static字段还有顺序要求?

前言前段时间,发现一个bug,代码结构类似下面的示例。你能说出这段代码的正确返回结果吗?class Program {private static int a1 a2;private static int a2 Init();private static int Init(){return 123;}static void Main(string[] args){…

汇编语言之转移指令和原理

1、引言 可以修改IP,或同时修改CS和IP的指令统称为转移指令。概括地讲,转移指令就是可以控制CPU执行内存 中某处代码的指令。 8086CPU的转移行为有以下几类: 1. 同时修改CS和IP时,称为段间转移&#…

【高德地图开发2】---配置工程

1.从网站下载开发包并解压。 3D地图包解压后得到:3D地图显示包“Android_Map_2.x.x.jar ”和文件夹“ armeabi ”(以 V2.2.0为例,含 - libamapv302.so 和 libmapv302ex.so 文件)。2D地图包解压后得到:2D地图显示包“An…

antd option宽度自适应_建议收藏:Axure手机自适应教程

hello,我又来啦,今天和大家分享用axure怎么做自适应,也就是说,我们做app端的作品时,怎么在不同的手机尺寸,显示最佳的样式。那么这期的话,我会以一个游戏的案例来展开,所以比较好玩。…

安装pip

2019独角兽企业重金招聘Python工程师标准>>> linux系统安装pip: 1.下载get-pip.py wget https://bootstrap.pypa.io/get-pip.py 2.安装pip python get-pip.py windows系统安装pip,这里使用easy_install: 1.首先在命令行切换到easy_install.exe所在的Scri…

所以,路遥工具箱到底是什么东西?

笔者的软件开发生涯是从 2008 年开始的,彼时还是 2G 时代。站长之家是笔者当时经常访问的网站,站长工具也成为当时探索网络世界时的入门工具。软件开发这些年也是浑浑噩噩的度过,鲜有建树。2020 年之前也写了一些小工具用于解决一些注入字符串…

刷1000遍奥数题,不如学会这几道逻辑题,让孩子秒懂数学,学习早开窍!

▲ 点击查看前阵子发现一个英国BBC制作的纪录片,叫《逻辑的乐趣》(The Joy Of Logic),介绍了逻辑的概念,逻辑的发展史,及其在现实生活中的应用和价值。讲解非常有意思,深入浅出,风趣…