微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳
1 2 3 4 5 第三章 80x86微处理器 80x86 微处理器简介 8086 微处理器 8086 寄存器 8086 引脚功能 8086 存储器组织 5
第三章 80x86微处理器 8086/8088存储器组织 8086/8088微处理器有20条地址线,可以配置1MB的内存储器。存储空间都按8位(即字节)进行组织,每个存储单元存储一个字节数据,若存放“字”数据(16位),则存放在相邻两个存储单元中,高字节存放在高地址单元,低字节存放在低地址单元。每个存储单元都有一个20位的地址,这1 M个存储单元对应的地址为00000HFFFFFH,如图3.10所示。
一个存储单元中存放的信息称为该存储单元的内容。 如00001H单元的内容为9FH,记为:(00001H)=9FH。 mov al, [0001H] 如从地址0011FH开始的两个连续单元中存放一个字型数据,则该数据为DF46H,记为:(0011FH)=DF46H。 mov ax, [011FH] 78H 9FH … 存储单元地址 00000H 00001H 46H DFH 6CH 98H 65H 5EH A6H 66H 6FH 0011FH 00120H 00121H E8009H E800AH E800BH E800CH E800DH FFFFFH 图3.10 数据在存储器中的存放
8086的1M存储空间实际上分为两个512KB的存储体,又称存储库,分别叫高位库和低位库。 A A 19 1 A BHE SEL A A SEL A A 19 1 19 1 高位(奇地址)库 低位(偶地址)库 512 K×8 512 K×8 D D D D 15 8 7 D D 15 8 D D 7 图3.13 8086存储器高低位库的连接
8086的1M存储空间实际上分为两个512KB的存储体,又称存储库,分别叫高位库和低位库。 BHE D 15 D 8 A 19 A 1 A19…… A3 A2 A1 A0 0…… 0 0 0 0 1 0…… 0 0 0 1 1 0…… 0 0 1 0 1 A19…… A3 A2 A1 A0 0…… 0 0 0 0 0 0…… 0 0 0 1 0 0…… 0 0 1 0 0 1# 0# 3# 2# 5# 4# 7 图3.13 8086存储器高低位库的连接
8086的1M存储空间实际上分为两个512KB的存储体,又称存储库,分别叫高位库和低位库。 BHE D 15 D 8 A 19 A 1 A19…… A3 A2 A1 A0 0…… 0 0 0 0 1 0…… 0 0 0 1 1 A19…… A3 A2 A1 A0 0…… 0 0 0 0 0 0…… 0 0 0 1 0 0…… 0 0 1 0 0 1# 0# 3# 2# 5# 4# 7 图3.13 8086存储器高低位库的连接
地址总线A19A1可同时对高、低位库的存储单元寻址,A0和BHE用于对库的选择。 当两者均为0时,则同时选中高低位库。 需注意的是,对于规则字(从偶数地址开始存放的字)的读/写操作只需一个总线周期,而非规则字(从奇数地址开始存放的字)的读/写操作需两个总线周期。
读偶地址单元中的字节;(b) 读奇地址单元中的字节; (c) 读偶地址单元中的字; (d) 读奇地址单元中的字 8086 被读字节 ×× 偶地址 8086 忽略字节 偶地址 CPU 忽略字节 奇地址 CPU 被读字节 ×× 奇地址 ( a ) ( b ) 忽略字节 偶地址 8086 ×× 偶地址 8086 被读字节 ×× 奇地址 被读字 CPU ×× 奇地址 CPU 被读字节 ×× 偶地址 忽略字节 奇地址 ( c ) ( d ) 图3.14 从8086存储器的偶数和奇数地址读字节和字 读偶地址单元中的字节;(b) 读奇地址单元中的字节; (c) 读偶地址单元中的字; (d) 读奇地址单元中的字
第三章 80x86微处理器 存储器分段 8086/8088CPU中有关可用来存放地址的寄存器如IP、SP、SI、DI、BP等都是16位的,故只能直接寻址64KB。为了对1M个存储单元进行管理,8086/8088采用了段结构的存储器管理方法。 8086/8088将整个存储器分为许多逻辑段,但只有4种类型:代码段、数据段、堆栈段和附加段。每个逻辑段的容量小于或等于64KB,允许它们在整个存储空间中浮动。各个逻辑段之间可以紧密相连,也可以互相重叠(局部重叠和完全重叠),还可以相互隔开。
第三章 80x86微处理器 00000H A段 64KB 10000H B段 64KB 1FF00H C段 D段 20000H 64KB M 00000H A段 紧密相连 64KB 部分重叠 完全重叠 10000H B段 64KB 1FF00H C段 D段 20000H 64KB 64KB 2FEFFH 30000H E段 断开排列 64KB 40000H
⑴ 逻辑地址:由段地址(逻辑段起始地址的高16位)和偏移地址(16位)表示的存储单元的地址称为逻辑地址,记为: 第三章 80x86微处理器 逻辑地址和物理地址 ⑴ 逻辑地址:由段地址(逻辑段起始地址的高16位)和偏移地址(16位)表示的存储单元的地址称为逻辑地址,记为: 段地址∶偏移地址 ⑵ 物理地址:由CPU内部总线接口单元BIU中的地址加法器根据逻辑地址产生的20位存储单元地址称为物理地址。如图3.7所示。
物理地址和逻辑地址的关系为: 物理地址=段地址×10H+偏移地址 第三章 80x86微处理器 物理地址和逻辑地址的关系为: 物理地址=段地址×10H+偏移地址 在程序设计中,段地址是由段寄存器(如CS、DS、SS或ES)提供,偏移地址通常是由地址寄存器(如IP、BX、BP、SP、SI或DI等)及立即数等提供。 15 段内偏移地址 19 4 3 段寄存器 0000 段地址左移4位 ∑ 19 20位物理地址 图3.7 物理地址的形成
第三章 80x86微处理器 段基址: 偏移地址 物理地址 对于任何一个物理地址来说,可以唯一被包含在一个逻辑段中,也可以包含在多个重叠的逻辑段中,只要能得到它所在段的首地址和段内的相对地址,就可以对它进行访问。即一个物理地址可以对应多个逻辑地址。 1123H 0000H 0001H 0002H 11230H 11231H 11232H 1123H×16+15H=11245H … 1124H×16+05H=11245H 15H 000EH 000FH 0010H 0011H 0012H 0013H 0014H 0015H 1123EH 1123FH 11240H 11241H 11242H 11243H 11244H 11245H 段基址: 1124H 05H … FFFEH FFFFH 1122EH 1122FH
堆栈由SS和SP来寻址。SS给出堆栈段的段地址,而SP给出当前栈顶(偏移地址),即指出从段地址到栈顶的偏移量。 第三章 80x86微处理器 堆栈操作 8086/8088系统中的堆栈使用段定义语句在存储器中定义的一个堆栈段,和其它逻辑段一样,它可以在1M字节的存储空间中浮动,其容量可达64KB,这是一个具有“先进后出”特性的存储区域,且属于向下生长的堆栈。 堆栈由SS和SP来寻址。SS给出堆栈段的段地址,而SP给出当前栈顶(偏移地址),即指出从段地址到栈顶的偏移量。
若已知当前SS=1050H,SP=0008H,AX=1234H,则8086系统中堆栈的入栈和出栈操作如下图所示。 PUSH AX 10502H 10503H AX 12 BB 12 34 AA 34 10504H 10505H 10506H 34 34 10507H 12 12 栈顶 10508H AA AA 10509H BB BB 1050AH BX 12 34 … POP BX 栈底 POP AX
第三章 80x86微处理器 Thank you!