1 / 23

3.2.2 8086/8088 寄存器结构

3.2.2 8086/8088 寄存器结构. 通用寄存器 8 个 (数据寄存器 4 个) (地址指针寄存器 2 个) (变址寄存器 2 个). 共 14 个寄存器. 段寄存器 4 个. 控制寄存器 2 个. 一.通用寄存器 通用寄存器 (8 个 ) :包括四个数据寄存器 AX(AH/AL), BX(BH/BL),CX(CH/CL),DX(DH/DL) ,两个地址指针寄存器 (SP,BP) 和两个变址寄存器 (SI,DI) 。. 1 .数据寄存器 AX 、 BX 、 CX 、 DX

noah
Download Presentation

3.2.2 8086/8088 寄存器结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3.2.2 8086/8088寄存器结构 通用寄存器8个 (数据寄存器4个) (地址指针寄存器2个) (变址寄存器2个) 共14个寄存器 段寄存器4个 控制寄存器2个

  2. 一.通用寄存器 通用寄存器(8个):包括四个数据寄存器AX(AH/AL), BX(BH/BL),CX(CH/CL),DX(DH/DL),两个地址指针寄存器(SP,BP)和两个变址寄存器(SI,DI)。 1.数据寄存器AX、BX、CX、DX 数据寄存器一般用于存放参与运算的操作数或运算结果。每个数据寄存器都是16位的,但又可将高、低8位分别作为两个独立的8位寄存器来用。高8位分别记作AH、BH、CH、DH,低8位分别记作AL,BL,CL,DL。注意,8086/8088 CPU的14个寄存器除了这4个16位寄存器能分别当作两个8位寄存器来用之外,其它寄存器都不能如此使用。

  3. 寄存器AX, BX,CX, DX的特定用法 AX(Accumulator)称为累加器。用该寄存器存放运算结果可使指令简化,提高指令的执行速度。此外,所有的I/O指令都使用该寄存器与外设端口交换信息。 BX(Base)称为基址寄存器。8086/8088CPU中有两个基址寄存器BX和BP。BX用来存放操作数在内存中数据段内的偏移地址,BP用来存放操作数在堆栈段内的偏移地址。 CX(Counter)称为计数器。在设计循环程序时使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序的运行速度。 DX(Data)称为数据寄存器。在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数。

  4. 数据寄存器AX,BX,CX,DX特定用法举例 code segment assume cs:code start: mov ax,0 mov bx,1 mov cx,10 loop1: add ax,bx ;为什么此时的AX称为累加器 inc bx dec cx ;CX称为计数器,使用它比其他寄存器有什么好处 jnz loop1 mov ah,4ch int 21h code ends end start

  5. 2. 地址指针寄存器SP、BP SP(Stack Pointer)称为堆栈指针寄存器。在使用堆栈操作指令(PUSH或POP)对堆栈进行操作时,每执行一次进栈或出栈操作,系统会自动将SP的内容减2或加2,以使其始终指向栈顶。 BP(Base Pointer)称为基址寄存器。作为通用寄存器,它可以用来存放数据,但更经常更重要的用途是存放操作数在堆栈段内的偏移地址。

  6. 3.变址寄存器SI、DI SI(Source Index)称为源变址寄存器。DI(Destination Index)称为目的变址寄存器。这两个寄存器通常用在字符串操作时存放操作数的偏移地址,其中SI存放源串在数据段内的偏移地址,DI存放目的串在附加数据段内的偏移地址。 当然它们也可以放数据. mov si, 10 mov di, 20 add si, di mov si, offset str1 mov di, offset str2

  7. 二 .段寄存器 为了对1M个存储单元进行管理,8086/8088对存储器进行分段管理,即将程序代码或数据分别放在代码段、数据段、堆栈段或附加数据段中,每个段最多可达64K个存储单元。段地址分别放在对应的段寄存器中,代码或数据在段内的偏移地址由有关寄存器或立即数给出。

  8. 8086/8088的四个段寄存器 CS(Code Segment)——代码段寄存器。用来存储程序当前使用的代码段的段地址。CS的内容左移四位再加上指令指针寄存器IP的内容就是下一条要读取的指令在存储器中的物理地址。 DS(Data Segment)——数据段寄存器。用来存放程序当前使用的数据段的段地址。DS的内容左移四位再加上按指令中存储器寻址方式给出的偏移地址即得到对数据段指定单元进行读写的物理地址。 SS(Stack Segment)——堆栈段寄存器。用来存放程序当前所使用的堆栈段的段地址。堆栈是存储器中开辟的按先进后出原则组织的一个特殊存储区,主要用于调用子程序或执行中断服务程序时保护断点和现场。 ES(Extra Segment)——附加数据段寄存器。用来存放程序当前使用的附加数据段的段地址。附加数据段用来存放字符串操作时的目的字符串。

  9. 段寄存器 提供段内偏移地址的寄存器 CS IP DS BX、SI、DI或一个16位数 SS SP或BP ES DI(用于字符串操作指令) 表3.2 8086/8088段寄存器与提供段内移地址的 寄存器之间的 默 认 组 合

  10. 三. 控制寄存器 IP(Instruction Pointer)——指令指针寄存器。用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能直接访问IP。 FLAGS——标志寄存器。它是一个16位的寄存器,但只用了其中9位,这9位包括6个状态标志位,3个控制标志位,如图3.5所示。

  11. 图3.5 8086/8088的标志寄存器

  12. 1. 状态标志位(6位) 状态标志位用来反映算术和逻辑运算结果的一些特征。下面分别介绍这6个状态标志位的功能。 CF(Carry Flag)——进位标志。当进行加减运算时,若最高位发生进位或借位则CF为1,否则为0。通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。 PF(Parity Flag)——奇偶标志位。当指令执行结果的低8位中含有偶数个1时,PF为1,否则为0。

  13. AF(Auxiliary Flag)——辅助进位标志位。当执行一条加法或减法运算指令时,若结果的低字节的低4位向高4位有进位或借位,则AF为1,否则为0。 ZF(Zero Flag)——零标志位。若当前的运算结果为0,则ZF为1,否则为0。 SF(Sign Flag)——符号标志位。当运算结果的最高位为1时,SF=1,否则为0。 OF(Overflow Flag)——溢出标志位。当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0。用来判断带符号数运算结果是否溢出。

  14. + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 O D I T S Z A P C 1 1 0 1 1 0 0101 0100 0011 1001 + 0100 0101 0110 1010 1001 1001 1010 0011 最高位 = 1 SF=1 低 8 位中偶数为 4 个 PF=1 运算结果不为 0 ZF=0 低 4 位向前有进位 AF=1 最高位向前没有进位 CF=0 次高位向前有进位 Cs=0,Cp=1,OF=Cs Cp=1

  15. 11101111 +) 11001000 10110111 0101101000001010 0100110010100011 1010011010101101 1 DF=1 DF=1 CF=1 CF=0 自动丢失 例3.1设变量x=11101111B,y=11001000B,X=0101101000001010B,Y=01001100 10100011B,请问分别执行x+y和X+Y操作后标志寄存器中各状态位的状态如何?

  16. 状态位 执行x+y后 执行X+Y后 CF 最高位D7向前有进位,CF=1 最高位D15向前没有进位,CF=0 PF 低8位中1的个数为偶数(6),PF=1 低8位中1的个数为奇数(5),PF=0 AF 低4位向前有进位,AF=1 低4位向前没有进位,AF=0 ZF 计算结果不为0,ZF=0 计算结果不为0,ZF=0 SF 最高位D7为1,SF=1 最高位D15为1,SF=1 OF CFDF=0,没有溢出,OF=0 CFDF=1,结果溢出,OF=1

  17. 2. 控制标志位(3位)——用来控制CPU的操作,由程序设置或清除。它们是: TF(Trap Flag)——跟踪(陷阱)标志位。是为测试程序的方便而设置。若将TF置1,CPU处于单步工作方式。 IF(Interrupt Flag)——中断允许标志位。是用来控制可屏蔽中断的控制标志位。若将IF置1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求;若用CLI指令将IF清0,则禁止CPU接受可屏蔽中断请求信号。 DF(Direction Flag)——方向标志位。若将DF置1,串操作按减地址方式进行,也就是说,从高地址开始,每操作一次地址自动递减;否则按增地址方式进行。

  18. 注意 有关寄存器,尤其是在存储器寻址时用来存放操作数在段内偏移地址的地址寄存器和标志寄存器中各控制标志位的使用方法,将在后续章节中涉及到时还将进一步详细介绍,请读者务必熟练掌握。

  19. 3.2.3 总线周期的概念 为了便于对8086/8088CPU引脚功能的说明,本节简要介绍总线周期的概念。 8086/8088CPU在与存储器或I/O端口交换数据时需要启动一个总线周期。按照数据的传送方向来分,总线周期可分为“读”总线周期(CPU从存储器或I/O端口读取数据)和“写”总线周期(CPU将数据写入存储器或I/O端口)。

  20. 8086/8088CPU基本的总线周期由4个时钟周期组成,如图3.6所示。时钟周期是CPU的基本时间计量单位,由CPU主频决定,如8086的主频为5MHz,1个时钟周期就是200ns。一个时钟周期又称为一个T状态,因此基本总线周期用T1、T2、T3、T4表示。图3.6(a)给出典型的总线周期波形图。在T1状态CPU把要读/写的存储单元的地址或I/O端口的地址放到地址总线上。若是“写”总线周期,CPU从T2起到T4,把数据送到总线上,并写入存储器单元或I/O端口;若是“读”总线周期,CPU则从T3起到T4从总线上接收数据,T2状态时总线浮空,允许CPU有个缓冲时间把输出地址的写方式转换成输入数据的读方式。

  21. 图3.6 8086/8088基本总线周期

  22. 图3.6(b)是具有空闲状态的总线周期。如果在一个总线周期之后不立即执行下一个总线周期,即CPU此时执行的指令不需要对存储器或I/O端口进行访问,且目前指令队列满而不需要到内存中读指令,那么系统总线就处于空闲状态,即执行空闲周期。在空闲周期中可包括一个或多个时钟周期,在这期间,在高4位的总线上,CPU仍驱动前一个总线周期的状态信息;而在低16位的总线上,则根据前一个总线周期是读还是写周期来决定。若前一个周期为写周期,CPU会在总线的低16位继续驱动数据信息;若前一个总线周期为读周期,CPU则使总线的低16位处于浮空状态。在空闲周期,尽管CPU对总线进行空操作,但在CPU内部,仍然进行着有效的操作,如执行某个运算、在内部寄存器之间传送数据等。

  23. 图3.6(c)是具有等待状态的总线周期。在T3状态结束之前,CPU测试READY信号线,如果为有效的高电平,则说明数据已准备好,可进入T4状态;若READY为低电平,则说明数据没有准备好,CPU在T3之后插入1个或多个等待周期TW,直到检测到READY为有效高电平后,CPU会自动脱离TW而进入T4状态。这种延长总线周期的措施允许系统使用低速的存储器芯片。

More Related