美文网首页
2.汇编之寄存器与8086寻址方式及内存的分段管理

2.汇编之寄存器与8086寻址方式及内存的分段管理

作者: 木子心语 | 来源:发表于2018-04-06 11:47 被阅读0次

    1.典型的CPU

    1.1.一个典型的CPU是由哪几部分构成?
    • 运算器:信息处理。
    • 控制器:控制其他器件进行工作。
    • 寄存器: 信息存储。
    1.2.不同寄存器与CPU的关系?
    • CPU中的主要部件是寄存器。
    • 寄存器是CPU中程序员可以用指令读写的部件。
    • 不同的CPU,寄存器的个数,结构是不相同的。
    1.3. 8086有多少个寄存器?
    8686CPU寄存器.png
    • 有14个寄存器
    • 都是16位的寄存器
    • 可以存放两个字节

    2.寄存器

    2.1.通用寄存器

    上图中,AX,BX,CX,DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。

    2.2寄存的用途

    CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算。

    2.3案例
    案例.png

    假设内存中有块空间之为1,现在它的值加1,并将结果存储到紫色的块中?
    我们应该怎么做呢?

    • CPU首先将空间值为1放到AX寄存器中
      mov ax,1
    • 然后让ax寄存器与1相加
      add ax,1
    • 最后将至赋值给内存空间
      mov 紫色块内部才能空间,ax
    2.4寄存器结构
    寄存器结构.png

    AX,BX,CX,DX这4个通用寄存器都是16位的。
    上一代8086的寄存器都是8位的,为了保证兼容,AX,BX,CX,DX,这4个寄存器都可以分为两个可独立使用的8位寄存器来用。

    • AX可分为AH和AL
    • BX可分为BH和BL
    • CX可分为CH 和CL
    • DX可分为DH和DL
      这里H代表高位寄存器,L代表低位寄存器。
    2.5寄存器存储情况
    寄存器存储情况.png
    • AX 中AH-->>高8位,AL-->>低8位
    • AX中二进制数据100111000100000,16进制4E20H
    • AH中二进制01001110,因为AX二进制位15位,所以要前补零,达到8位
    • AL中二进制00100000,低八位存储。
    2.6.字节与字在寄存器中的存储

    8086CPU可以一次性处理以下两种尺寸的数据。

    • 字节:byte,一个字节由8个bit组成,可以存储8位寄存器中
    • 字: word,1个字由2个字节组成,这2个字节分别称为字的高字节和低字节。
    2.7.通用寄存器
    • ARM64拥有31个64位的通用寄存器x0到x30
    • 这些寄存器通常用来存放一般性的数据,称为通用寄存器
    2.8 pc寄存器
    • 指令指针寄存器,CPU当前要读取指令的地址
    • 在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息

    3. 8086寻址方式

    3.1物理地址

    CPU访问内存单元时,要给出内存单元的地址,所有的内存单元都有唯一的地址,叫做物理地址。

    3.2 8086给出物理地址的方法
    • 8086有20位地址总线,可以传送20位地址,达到1MB寻址能力。
    • 它是16位结构的CPU,他内部能够一次性处理,传输,暂时存储的地址为16位。
    • 如果将地址从内部简单的发出,那么它只能送出16位的地址,表现出来的寻址能力只有64KB。
    • 8086 采用了一种在内部用两个16位地址合成一个20位的物理地址。
    3.3 8086逻辑结构
    8086逻辑结构.png

    如图,

    • CPU中的相关部件提供两个16位的地址,一个称为段地址,一个称为偏移地址。
    • 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件。
    • 地址加法器将两个16位地址合成为一个20位的物理地址。
    • 地址加法器通过内部总线将20位物理地址送入输入输出控制电路。
    • 输入输出控制电路将20位物理地址送上地址总线
    • 20位物理地址被地址总线传送到存储器。

    地址加法器采用 物理地址=段地址 * 16 + 偏移地址 的方法用段地址和偏移地址合成物理地址。

    3.4 案例

    案例一:
    三个村庄在一条直线上,A,B,C
    A------------1000米-----------------B----------500米---------C
    如果我想去C村庄的话,有两种方式:

    • 1.从A到C走1500米就是C村庄,这里可以认为是C村庄的物理地址
    • 2.从A到B走1000米,相对于A的基地址,再从B走500米到C,相当于基地址的偏移地址。

    第一种方式直接给出物理地址,第二种方式是用基础地址和偏移地址相加得到物理地址。

    案例二:
    我们用纸传递信息,比如我们必须有一张可以容纳4位数据的纸条,才能写下2826这个数据。
    如果我们没有一张可以容纳4位数据的纸条,我们这里只有2张可以容纳3位数据的纸条,表现形式:
    2--0--0
    8--2--6
    第一张纸上写200(段地址),在第二张纸上写上826(偏移地址),我们需要做如下运算:
    200(段地址) * 10 + 826(偏移地址) = 2826(物理地址)

    8086就是这样一个只能提供两张3位数据纸条的CPU。

    4.内存的分段管理

    • 8086是用 基础地址(段地址 * 16 ) + 偏移地址 = 物理地址 的方式给出物理地址
    内存分段管理.png
    • 为了开发方便,我们可以采取分段的方法来管理内存,比如:地址10000H~100FFH的内存单元组成一个段,该段的起始地址(基础地址 )为10000H,段地址为1000H,大小为100H。
    内存单元分2段.png
    • 地址10000H ~ 1007FH,10080H ~100FFH组成两段,它们的起始地址(基础地址)为10000H 和10080H,段地址为1000H和1008H,大小都是80H。

    一段内存 10080H ~ 100FFH
    段地址:1008H
    其实地址(基础地址):10080H
    1008:0020 -->> 10080 +0020 = 100A0(物理地址)

    注意:段地址 * 16 必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。

    5.总结

    以上是对寄存器与8086寻址方式及内存的分段管理介绍,
    我们下一章继续对汇编内容讲解。
    跟随我,继续学习。

    相关文章

      网友评论

          本文标题:2.汇编之寄存器与8086寻址方式及内存的分段管理

          本文链接:https://www.haomeiwen.com/subject/dfvjhftx.html