欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

8086 奇偶分体与边界对齐

程序员文章站 2022-06-20 10:40:57
...

1 为什么需要奇偶分体

  1. 8086 数据类型分俩种,字(16 bit)类型和字节(8 bit)类型
  2. 有时要读字类型,有时又要读字节类型
  3. 为什么需要字类型呢?因为需要对以前的老处理器(8 bit 寄存器)做向下兼容

2 如何实现奇偶分体

  1. 将一块存储体,平分为两个部分,每个部分 8 bit 的宽度,一部分全是奇数地址,另外一部分全是偶数地址
  2. 将高 8 位地址线与偶存储体相连,将低 8 位地址线与奇存储体相连
  3. 字类型的数据需要连续读取两个 8 bit 存储单元,必然存储单元地址一个是奇数,另一个是偶数
  4. 使用字节类型时,只需要读取一个 8 bit 存储单元,所以存储单元地址可以是奇数,也可以是偶数
    8086 奇偶分体与边界对齐
BHE* A0 传送的数据 指令举例
0 0 两个连续的字节 MOV AX,[2002H]
0 1 奇地址的字节 MOV AX,[2003H]
1 0 偶地址的字节 MOV AX,[2002H]
1 1 不传送

3 边界对齐问题

  1. 当读取数据时,我们希望在 一个周期 内读取到所有数据,如果只是使用奇偶分体还是做不到的

  2. 如果不对齐,如下图,当读取第一个字节数据时可以一个周期内读到,但读取字数据时就需要两个周期了
    8086 奇偶分体与边界对齐

       ORG 0012H
       D1 DB 28H
       D2 DW 8888H
    
  3. 所以我们需要将不足一个字长的数据,补充为一个字长
    8086 奇偶分体与边界对齐

       ORG 0012H
       D1 DB 28H
       ORG $+1
       D2 DW 8888H
    
  4. 高级语言都会对自动帮你优化成边界对齐,如果是使用汇编,需要你人为干预