第二章 寄存器小结

Posted onioneer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章 寄存器小结相关的知识,希望对你有一定的参考价值。

  1. 存储器从功能和连接上分为:随机存储器:用于存放CPU的绝大部分程序和数据;装有Bios的ROM:用于存储设备的基本输入输出系统;接口卡上的RAM:接口卡需要对大批量输入、输出数据进行暂存时使用,如显存。CPU在操作它们的时候,把它们都当做内存来对待,把它们总的看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。
  2. 2.8086机中,任意时刻,CPU将CS:IP指向的内容当做指令执行,在加电或复位后CS和IP被设置为CS=FFFFH,IP=0000H,即FFFF0H单元的指令是8086pc机开机后执行的第一条指令。
  3. 3.8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址,8086不支持将数据直接送入段寄存器,只能有一个寄存器来进行中转。
  4. 4.8086CPU提供入栈和出栈指令,入栈和出栈操作都是以字为单位进行的,栈地址为SS:SP
  5. 5.可执行文件由描述信息和程序组成,程序来自于源程序中的汇编指令和定义的数据;描述信息则主要是编译、连接程序对源程序中伪指令进行处理做得到的信息。如CPU从何处开始执行程序,只要在源程序中用“end 标号”指明就可以了。
  6. 6.寄存器:reg包含:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,disreg包含:ds,ss,cs,es关于bx,si,di和bp:只有这四个寄存器可以用于[]中进行内存单元的寻址只要使用寄存器bp,且没有显性给出段地址,段地址默认在ss中
  7. 7.绝大多数机器指令都是进行数据处理的指令,处理大致分为:读取、写入、运算。所要处理的数据可以在三个地方:cpu 内部(寄存器)、内存、端口。汇编语言用三个概念来表达数据的位置:立即数、寄存器、段地址+偏移地址。
  8. 8.汇编指令举例

汇编指令

控制CPU完成的操作

用高级语言的语法描述

mov ax,18

将18送入寄存器AX

AX=18

mov ah,78

将78送入寄存器AH

AH=78

add ax,8

将寄存器AX中的数值加上8

AX=AX+8

mov ax,bx

将寄存器BX中的数据送入寄存器AX

AX=BX

add ax,bx

将AX和BX的数值相加,结果存在AX中

AX=AX+BX

9.16位结构的cpu

运算器一次最多可以处理16位的数据

寄存器的最大宽度为16位

寄存器和运算器之间的通路为16位

10.8086CPU给出物理地址的方法技术分享图片

 

 

11.段地址×16+偏移地址=物理地址的本质含义

CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

12.修改CSIP的指令

CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CSIP中的内容决定的,程序员可以通过改变CSIP中的内容来控制CPU执行目标指令。

我们如何改变CSIP的值呢?显然,8086CPU必须提供相应的指令。我们如何修改AX中的值?可以用mov指令,如mov ax,123ax中的值设为123,显然,我们也可以用同样的方法设置其他寄存器的值,如mov bx,123mov cx,123mov dx123等。其实,8086CPU大部分寄存器的值,都可以用mov指令来改变,mov指令被称为传送指令。

但是,mov指令不能用于设置CSIP的值,原因很简单,因为8086CPU没有提供这样的功能。8086CPUCSIP提供了另外的指令来 改变它们的值。能够改变CSIP的内容的指令被统称为转移指令(我们以后会深入研究)。我们现在介绍一个最简单的可以修改CSIP的指令:jmp指 令。

若想同时修改CSIP的内容,可用形如"jmp段地址:偏移地址"的指令完成,如

jmp 2AE3:3,执行后:CS=2AE3HIP=0003HCPU将从2AE33H处读取指令。

jmp 3:0B16,执行后:CS=0003HIP=0B16HCPU将从00B46H处读取指令。

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

若想仅修改IP的内容,可用形如"jmp 某一合法寄存器"的指令完成,如

jmp ax,指令执行前:ax=1000HCS=2000HIP=0003H
指令执行后:ax=1000HCS=2000HIP=1000H
jmp bx,指令执行前:bx=0B16HCS=2000HIP=0003H
指令执行后:bx=0B16HCS=2000HIP=0B16H

14.小结:

段地址在8086CPU的段寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU4个段寄存器,其中CS用来存放指令的段地址。

CS存放指令的段地址,IP存放指令的偏移地址。

8086机中,任意时刻,CPUCSIP指向的内容当作指令执行。

8086CPU的工作过程:

CSIP指向的内存单元读取指令,读取的指令进入指令缓冲器;

IP指向下一条指令;

执行指令。(转到步骤1,重复这个过程)

8086COU提供转移指令修改CSIP的内容。




以上是关于第二章 寄存器小结的主要内容,如果未能解决你的问题,请参考以下文章

Linux GCC GDB 第二节

数据结构第二章小结

第二章学习小结

第二章小结

第二章学习小结

第二章小结