天天看点

8086存储器和IO组织【微机原理】

8086存储器和IO组织

  • ​​8086存储器​​
  • ​​1.8086/8088存储空间​​
  • ​​2.存储器的段结构​​
  • ​​3.逻辑地址与物理地址​​
  • ​​4.堆栈操作​​
  • ​​CPU发展​​

8086存储器

1.8086/8088存储空间

8086/8088有20条地址线,可直接对1M个存储单元进行访问,。每个存储单元存放一

个字节型数据,且每个存储单元有一个20位的地址,这1M个存储单元对应的地址为

00000H~FFFFFH,如图3.10所示

8086存储器和IO组织【微机原理】

一个存储单元中存放的信息称为该存储单元的内容。如图3.10所示,00001H单元的内容为9FH,记为:(00001H)=9FH

若存放的是字型数据(16位二进制数),则将字的低位字节存放在低地址单元,高位字节存放在高地址单元。如从地址0011FH开始的两个连续单元中存放一个字型数据,则该数据为DF46H,记为:(0011FH)=DF46H

若存放的是双字型数据(32位二进制数,这种数一般作为地址指针,其低位字是被寻址地址的偏移量,高位字是被寻址地址所在段的段地址),这种类型的数据要占用连续的4个存储单元。同样,低字节存放在低地址单元,高字节存放在高地址单元。如从地址E800AH开始的连续4个存储单元中存放了一个双字型数据,则该数据为66A65E65H,记为:(E800AH)=66A65E65H.

2.存储器的段结构

用户编写的程序(包括指令代码和数据)被分别存储在代码段、数据段、堆栈段和附加数据段中,这些段的段地址分别存储在段寄存器CS、DS、SS和ES中,而指令或数据在段内偏移地址可由对应的地址寄存器或立即数形式的位移量给出,如表3.8所示。

8086存储器和IO组织【微机原理】
  • 如果从存储器中读取指令,则段地址来源于代码段寄存器CS,偏移地址来源于指令指针寄存器IP。
  • 如果从存储器读/写操作数,则段地址通常由数据段寄存器DS提供(必要时可通过指令 前缀实现段超越,将段地址指定为由CS、ES或SS提供),偏移地址则要根据指令中所给出的寻址方式确定,这时,偏移地址通常由寄存器BX、SI、DI以及立即数形式的位移量等提 供,这类偏移地址也被称为“有效地址”(EA)。如果操作数是通过基址寄存器BP寻址的, 则此时操作数所在段的段地址由堆栈段寄存器SS提供(必要时也可指定为CS、SS或ES)(详见第4章“寻址方式”一节)。
  • 如果使用堆栈操作指令(PUSH或POP)进行进栈或出栈操作,以保护断点或现场,则段地址来源于堆栈段寄存器SS,偏移地址来源于堆栈指针寄存器SP(详见本节“4.堆栈 操作”)。
  • 如果执行的是字符串操作指令,则源字符串所在段的段地址由数据段寄存器DS提供 (必要时可指定为CS、ES或SS),偏移地址由源变址寄存器SI提供;目的字符串所在段的 段地址由附加数据段寄存器ES提供,偏移地址由目的变址寄存器DI提供。

    以上这些存储器操作时段地址和偏移地址的约定是由系统设计时事先已规定好的,编写程序时必须遵守这些约定。

3.逻辑地址与物理地址

  • 逻辑地址:段地址:偏移地址
  • 物理地址:段地址x10h+偏移地址
  • 存储单元的逻辑地址不是唯一的,即一个存储单元只有唯一确定的物理地址,但可以有一个或多个逻辑地址

4.堆栈操作

开辟堆栈的目的主要有以下两点:

(1)存放指令操作数(变量)

(2)保护断点和现场

CPU发展