在汇编程序中,内存地址是”合成”的,以8086cpu为例
8086有20根地址总线,寻址能力为2的20次方b,换算为1M,
它的内部为16位结构,它只能传输16位地址,即硬件实现上最多输出仅64k大小地址,它通过合成2个16位地址,即把第一个64k作为逻辑段(*16),第二个为段内地址偏移实现了1MB的寻址能力
通俗来说,就相当于数字仅有0-9,却通过”进位合成”了无穷大的数字,在8086中分为十进制位”段地址”,个位”段偏移地址”,8086的架构和现在的cpu相似
一个物理地址,可以由不同的段地址和偏移地址组成( 16进制的16就相当于10进制的10 ),例如
物理地址 | 段地址 | 偏移地址 |
21F60H | 2000H | 1F60H |
2100H | 0F60H | |
21F0H | 0060H | |
21F6H | 0000H | |
1F00H | 2F60H |
内存地址本身是连续的,之所以产生段,是因为cpu的管理,在cpu中有一个”地址合成器”负责内存地址的合成