首页 > 其他分享 >8086 微处理器

8086 微处理器

时间:2023-03-10 22:15:54浏览次数:38  
标签:8086 16 微处理器 基址 地址 寄存器 AX BX

《Intel 8086CPU的内部结构》

  

 

  通用寄存器AX,BX,CX,DX

    AX:累加器

    BX:基址寄存器

    CX:计数寄存器

    DX:数据寄存器

  具体师大书P12

 

 专用寄存器BP,SP,DI,SI

    BP:基址寄存器

    SP:堆栈指针寄存器

    DI:目的变址寄存器

    SI: 源变址寄存器

  

 段寄存器CS,DS,SS,ES

  段寄存器主要是存放段基址,决定数据放哪一大块,

  再通过偏移地址(通常是在其他寄存器中),来决定具体地址

    CS:代码段寄存器

      一般是不允许(用户无权限)进行对CS的更改,因为

      一旦存放代码的地址变动会引起严重后果

    DS:数据段寄存器

    SS:堆栈段寄存器

    ES:附加段寄存器

  

 指令指针寄存器IP

   用于存放下一条执行指令的偏移地址

   CPU取指令总是以CS为段基址,IP为段内偏移地址

   具体地址计算为CS*16+IP

   即首先CS内保存的地址左移4位,再加上IP保存的地址

  用户不能直接访问IP

 

 标志寄存器FR

   其为16位寄存器,使用9位

   6位状态标志位,3位控制标志位

  具体看P13

   值得注意的是在DEBUG调试软件中

   标志位显示的形式特殊,以字符形式显示:具体P14

     

 

 

上述寄存器都是16位的

 

《Intel 8086的存储器》

  8086系统中按照字节编址

  其可寻址的存储器空间为 1MB(2^20B),20根地址线,范围为00000H~FFFFFH

  

  同时其存储器的组织方式为:交叉编址

  

 

     所谓偶地址存储器即编下来的地址为偶数(在十进制下,如E为14,即是偶数)

   每一次访存,都可以一次性地读取一行,如:

      

 

  

   8086中数据的存放规则是:

     如果存放的是一个字节,则按照顺序存放

     如果存放的是一个字,将字的低位放在低地址中,高位字节放在高地址中

     如果存放的是一个双字,低位字是被寻址地址的偏移量,高位字是被寻址地址所在的段地址

     

  

  当我们要读取一个字节(8位)时,只需要访问该字节所在的存储体

  

  当我们要读取一个字(16位)时,要分数据是放在奇地址还是偶地址

    

 

       如图:

        当要读取数据19E4时,数据是从偶地址20020H开始的

        则我们一个周期读取一行

        像这样:

        就可以将要的数据全部读出

        叫做规则存放

         

        但当要读取数据27F8,则数据从奇地址20023H开始的

        则要访问两次内存才内读出想要的数据

        叫做不规则存放

 

    

《物理地址的形成》  

  我们知道8086的寄存器都是16位的,所以要一个寄存器来保存某一个内存中的地址是不现实的

  所以我们如何得出内存中的真实地址呢?

 

    可以通过两个寄存器联合得到

    使用分段技术,每一个逻辑地址都由段基址和偏移地址组成

  

    第一个16位寄存器确定要访问的逻辑段的段基址

    每一段的容量<=64KB

    1MB的存储器空间至少可分成16个逻辑段

    

    第二个16位寄存器确定该段内要访问的存储单元

    最大可以访问64KB的空间

 

    

 

        物理地址=段基址*16(左移4位,16进制下就移动1位)+偏移地址

    如:CS=3000H,IP=0200H

       指令所在地址为30000+0200=30200H

    

《辨析MOV AX,BX 与 MOV AX,[BX]》

  MOV AX,BX

    表示将BX寄存器中存放的数据移动到AX寄存器中

 

  MOV AX,[BX]

    [BX]表示内存中的地址

    其实其是省略了段基址

    在默认情况下,段基址为DS

    [BX]==DS:BX==DS*16+BX

    表示将DS*16+BX中保存的数据放到AX中

  

 

     如图用DEBUG查看的地址信息

   其中段基址为073FH

  一行中有16个字节单元,所以可以看到相邻行的偏移地址相差16(在16进制下就是相差1)

  其中的00表示 0000 0000 (在2进制下)(其总共有8位)

  

          

标签:8086,16,微处理器,基址,地址,寄存器,AX,BX
From: https://www.cnblogs.com/cilinmengye/p/17204769.html

相关文章