8086 奇偶分体与边界对齐
程序员文章站
2022-06-20 10:40:57
...
1 为什么需要奇偶分体
- 8086 数据类型分俩种,字(16 bit)类型和字节(8 bit)类型
- 有时要读字类型,有时又要读字节类型
- 为什么需要字类型呢?因为需要对以前的老处理器(8 bit 寄存器)做向下兼容
2 如何实现奇偶分体
- 将一块存储体,平分为两个部分,每个部分 8 bit 的宽度,一部分全是奇数地址,另外一部分全是偶数地址
- 将高 8 位地址线与偶存储体相连,将低 8 位地址线与奇存储体相连
- 字类型的数据需要连续读取两个 8 bit 存储单元,必然存储单元地址一个是奇数,另一个是偶数
- 使用字节类型时,只需要读取一个 8 bit 存储单元,所以存储单元地址可以是奇数,也可以是偶数
BHE* | A0 | 传送的数据 | 指令举例 |
---|---|---|---|
0 | 0 | 两个连续的字节 | MOV AX,[2002H] |
0 | 1 | 奇地址的字节 | MOV AX,[2003H] |
1 | 0 | 偶地址的字节 | MOV AX,[2002H] |
1 | 1 | 不传送 | 无 |
3 边界对齐问题
-
当读取数据时,我们希望在 一个周期 内读取到所有数据,如果只是使用奇偶分体还是做不到的
-
如果不对齐,如下图,当读取第一个字节数据时可以一个周期内读到,但读取字数据时就需要两个周期了
ORG 0012H D1 DB 28H D2 DW 8888H
-
所以我们需要将不足一个字长的数据,补充为一个字长
ORG 0012H D1 DB 28H ORG $+1 D2 DW 8888H
-
高级语言都会对自动帮你优化成边界对齐,如果是使用汇编,需要你人为干预
推荐阅读