dw做网站的流程,网站开发的3个阶段,长沙房产,制作网站需要的技术与软件1、介绍
一个典型的CPU#xff0c;由运算器、控制器、寄存器等器件组成#xff0c;对于游戏修改者来说#xff0c;重点学习寄存器#xff0c;其它不必管。 不同的CPU#xff0c;寄存器的个数、结构是不相同的#xff0c;8086CPU有14个寄存器#xff0c;每个寄存器有一个…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内部形成物理地址的呢
1CPU中的相关部件提供2个16位的地址一个称为段地址另一个称为偏移地址。
2段地址和偏移地址通过内部总线送入一个称为地址加法器的部件。
3地址加法器将这两个16位地址合成为1个20位的物理地址。
地址加法器采用“段地址×16偏移地址”的方法合成物理地址。即段地址×16偏移地址物理地址。
“段地址×16”可以理解为段地址的16倍以下这个说法更好理解。
我们把16转化为十六进制10然后计算一下。假设段地址2A72A7×102A70计算结果2A70相对于段地址2A7左
移了一位所以段地址×16可以理解为段地址左移一位。
问答题如果段地址A100偏移地址42B那么物理地址
答段地址×16段地址左移一位即A100左移一位A1000A100042BA142B所以物理地址是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 00mov bx,0003h了。
CS和IP的重要性在于它们的数值提供了CPU要执行指令的地址。
在1.5节中我们说过在内存中指令和数据没有任何区别都是二进制信息CPU在工作的时候把有的信息看作指令
把有的信息看作数据那么CPU在什么时候把它看作指令在什么时候把它看作数据呢现在我们可以回答第一个问题了。 答只要内存单元二进制信息被CSIP指向那么这些内存单元就会被CPU看作指令执行。
7 修改CS和IP的指令
Mov被称为传送指令可以修改大部分寄存器的值。如mov ax,123H将ax中的值设为123H同样地我们可以mov bx2a4H mov cx5f0H mov dxb29H 等等。但是mov不能修改CS和IP这两个寄存器的值因为8086CPU没有提
供这样的功能。
要修改CS和IP的值可以用jmp指令事实上还有一些指令是可以修改CS和IP的这些指令被统称为转移指令这
个在后面的课程会讲到现在先学习这个最简单的转移指令jmp。
若想同时修改CS和IP的值可用形如“jmp 段地址偏移地址”的指令完成。如jmp 2ae3:9执行后CS2ae3H
IP9HCPU将从2ae39H处读取指令。
“jmp 段地址偏移地址”指令的功能为用指令中给出的段地址修改CS偏移地址修改IP。
若想仅修改IP的值可用形如“jmp 某一合法寄存器”的指令完成。如jmp ax执行前ax437aHCS17f0HIP
423cH执行后CS不变IP437aH。
“jmp 某一合法寄存器”指令的功能为用寄存器中的值修改IP。为什么叫“某一合法寄存器”因为不是所有寄存器都可
以修改IP。 8 代码段
在编程时可以根据需要将一组内存单元定义为一个段。段分3种类型代码段、数据段、栈段。
对于8086PC机我们可以将长度为NN≤64KB的一组代码机器指令和汇编指令存在一组地址连续、起始地址为
16的倍数的内存单元中我们将这一组内存单元定义为代码段。
比如将 机器指令 汇编指令 B8 00 00 mov ax0000H 05 23 01 add ax0123H 8B D8 mov bxax FF E3 jmp bx
这段长度为10字节的指令存放在123B0H~123B9H的一组内存单元中我们就可以认为这是一个代码段。若要让CPU
执行这些指令必须要将CSIP指向代码段中第一条指令的首地址123B0H