存储器从读写操作上分类
一台 PC 机中,装有多个存储器芯片。这些存储器芯片从物理连接上看是独立的、不同的器件。从读写属性上看分为两类:随机存储器(RAM)和只读存储器(ROM)。随机存储器可读可写,但必须带电存储,关机后存储的内容丢失;只读存储器只能读取不能写入,关机后其中的内容不丢失。这些存储器从功能和连接上又可分为以下几类。
随机存储器、装有BIOS的ROM、接口卡上的RAM
8086PC机内存地址空间分配图
8086CPU寄存器
不同的 CPU,寄存器的个数、结构是不相同的。8086CPU 有 14 个寄存器,每个寄存器有一个名称。这些寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
AX、AH、AL
8086CPU 的上一代 CPU 中的寄存器都是 8 位的,为了保证兼容,使原来基于上代 CPU 编写的程序稍加修改就可以运行在 8086 之上,8086CPU 的 AX、BX、CX、DX 这 4 个寄存器都可分为两个可独立使用的 8 位寄存器来用:
AX 可分为 AH 和 AL;
BX 可分为 BH 和 BL;
CX 可分为 CH 和 CL;
DX 可分为 DH 和 DL。
寄存器相加
1、程序段中的最后一条指令 add ax, bx,在执行前 ax 和 bx 中的数据都为 8226H,相加后所得的值为:1044CH,但是 ax 为 16 位寄存器,只能存放 4 位十六进制的数据,所以最高位的 1 不能在 ax 中保存,ax 中的数据为:044CH。
2、程序段中的最后一条指令 add al,93H,在执行前,al 中的数据为 C5H,相加后所得的值为:158H,但是 al 为 8 位寄存器,只能存放两位十六进制的数据,所以最高位的 1 丢失,ax 中的数据为:0058H。
注意:在2中,此时al是做为一个独立的八位寄存器来使用的,和ah没有关系,CPU在执行指令是认为al和ah是两个不相关的寄存器(即使溢出也不会进位到ah中)
四条指令,编程计算2的4次方,仅使用mov,add指令
mov ax,2
add ax,ax
add ax,ax
add ax,ax
8086CPU给出物理地址的方法
有20位地址总线,将16位段地址和16位的偏移地址送入地址加法器,输出20为的物理地址。
地址加法器采用物理地址=段地址*16+偏移地址的方法用段地址和偏移地址来合成物理地址。
思考:一个X进制的数据左移1位,相当于乘以X。
”物理地址=段地址*16+偏移地址“的本质含义是:基础地址+偏移地址=物理地址
结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址
段地址用SA表示,偏移地址用EA表示
物理地址可以转化成多种 段地址:偏移地址 组合
将物理地址转化为段地址:偏移地址
-
利用十六进制的特点
-
可以把12345H拆分为12340H + 0005H。
-
这里12340H相当于段地址乘以16(即段地址×10H),0005H就是偏移地址。
-
那么段地址就是1234H,偏移地址就是5H。
-
在将物理地址转换为段地址:偏移地址格式时,有一个较为简便的技巧。
-
因为物理地址 = 段地址×16+偏移地址,而16在十六进制中表示为10H。
-
对于给定的物理地址 (A),我们可以将其写成 (A = B\times10H + C)的形式,其中 (B) 就是段地址, (C) 就是偏移地址。
-
例如,对于物理地址12345H:
-
-
灵活拆分物理地址
-
一般情况下,观察物理地址的十六进制表示形式,先尝试将其拆分成一个能被10H整除的数和另一个小于10H的数。
-
能被10H整除的数除以10H得到段地址,另一个数就是偏移地址。
-