2.4.2内存地址的分段 Intel8086/8088有20根地址线,其内存寻址空间为1MB。 为了表示某个地址,需要20位。 机器字长为16位,它能表示的最大内存空间为216=64KB Intel8086/8088采用分段访问内存的办法,使得16位寄存器 可以访问20位地址(64K个段,每段最多64KB)。 位 19 0 物理地址 位 5 段地址 0000 位 15 段内地址
2.4.2 内存地址的分段 Intel 8086/8088有20根地址线,其内存寻址空间为1 MB。 为了表示某个地址,需要20位。 机器字长为16位,它能表示的最大内存空间为2 16=64 KB。 Intel 8086/8088采用分段访问内存的办法,使得16位寄存器 可以访问20位地址 (64K个段,每段最多64KB)。 位 19 0 物理地址 位 15 0 段地址 0000 位 15 0 段内地址
2.4.3物理地址和逻辑地址 20位物理地址采用Inte1的分段方法将其分为16位的段地 址和16位的段内地址(偏移值)。 用段地址和偏移地址来表示内存单元地址的形式称为逻 辑地址,写成“段地址:偏移地址”的格式。 例:物理地址00000H 0000H:0000H 段地址乘以16(左移4位)再加上偏移地址,即可得到 物理地址。 段地址×16D(或10H+偏移地址=物理地址 例:设逻辑地址为1234H:5678H,则物理地址为 1234H×10H+5678H=12340H+5678H=179B8H
2.4.3 物理地址和逻辑地址 20位物理地址采用Intel的分段方法将其分为16位的段地 址和16位的段内地址(偏移值)。 用段地址和偏移地址来表示内存单元地址的形式称为逻 辑地址,写成“段地址:偏移地址”的格式。 例:物理地址00000H: 0000H:0000H 段地址乘以16(左移4位)再加上偏移地址,即可得到 物理地址。 段地址×16D(或10H)+偏移地址=物理地址 例:设逻辑地址为1234H:5678H,则物理地址为: 1234H×lOH+5678H=12340H+5678H=179B8H
如果给定一个物理地址,要算出它的逻辑地址,则有很 多个结果 例:179B8的逻辑地址如下: 1000H:79B8H 1001H:79A8H 1234H:5678H 179BH:0008H 1234H:5678H只是各种分段结果中的一种。 段地址中增加1,内存空间就增加16D(10H)。16字节称为 1节( paragraph),英文简写的para就代表1节
如果给定一个物理地址,要算出它的逻辑地址,则有很 多个结果。 例:179B8H的逻辑地址如下: 1000H:79B8H 1001H:79A8H 1234H:5678H 179BH:0008H 1234H:5678H只是各种分段结果中的一种。 段地址中增加l,内存空间就增加16D(10H)。16字节称为 1节(paragraph),英文简写的para就代表1节
2.4.4实际内存分配方法 例:假定一个程序的代码段大小为 4096D,数据段大小为8180D,堆栈段 大小为252D。 按节方式上舍入为4096D,8192D,256D,内存 即1000H,200OH,10OH。 设给此程序分配的内存区从21000H开始 21000H (节边界对齐),这三个段在内存中的代码段 位置为 21FFFH 段寄存器 2200OH 数据段 CS 2100H 23FFFH DS 2200H 24000H 240OH 堆栈段 ES 240FFH
2.4.4 实际内存分配方法 例 :假 定一 个程 序的 代码 段大小 为 4096D,数据段大小为8180D,堆栈段 大小为252D。 按节方式上舍入为4096D,8192D,256D, 即1000H,2000H,100H。 设给此程序分配的内存区从21000H开始 (节边界对齐),这三个段在内存中的 位置为: 段寄存器 CS 2100H DS 2200H SS 2400H ES 内存 …… 21000H 代码段 21FFFH 22000H 数据段 23FFFH 24000H 堆栈段 240FFH ……
内存起始地址21000H,起始段地址为210OH 代码段、数据段、堆栈段大小依次为: 1000H,2000H,10OH。 SS=DS+200H=2400H 代码段、数据段及堆栈段的偏移地址范围分别为: 0-oFFFH, 01FFFH, 0FFH
内存起始地址21000H,起始段地址为2100H。 代码段、数据段、堆栈段大小依次为: 1000H,2000H,lOOH。 SS=DS+200H=2400H。 代码段、数据段及堆栈段的偏移地址范围分别为: 0~0FFFH,0~1FFFH,0~FFH