一个存储单元有一个物理地址,还有多个逻辑地址
物理地址:
就是一个存储单元的编号;
每个物理存储单元都有一个20位编号;
8086CPU物理地址范围:00000H~FFFFFH (16进制)
(寻址空间:2^20 = 1M)(2^10 = 1024b = 1kb)
逻辑地址:
在用户编程时,采用逻辑地址,形式为:
段基地址:段内偏移地址
物理地址:将逻辑地址左移4位,加上偏移地址就得到20位物理地址
例如
逻辑地址: 1230:100
物理地址: 12400(1230*10H+100)
为什么左移4位是x10H?
1111 1111
1111 1111 (左移4位 即2^4= 16 用16进制来表示就是10)
段寄存器与逻辑段:
**8086CPU有4个段寄存器,每个段寄存器用来确定一个逻辑段的起始位置,每种逻辑段均有各自的用途**
CS(代码段):指明代码的起始位置
利用CS:IP来取得下一条要执行的指令
SS(栈堆段):指明栈堆段的起始位置
利用SS:SP操作堆栈顶的数据
DS(数据段):指明数据的起始位置
利用DS:EA存取数据段中的数据
ES(附加段):指明附加段的起始位置
利用ES:EA存取附加段中的数据
注意:
EA是偏地址,称之为有效地址EA
若操作数在主存中,存取的方法有直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式 ,基址变址寻址方式和相对基址变址寻址方式
没有指明段前缀时,一般的数据访问在DS(数据)段
例如:
MOV AX,[1000H]; = MOV AX,DS:[1000H] (加粗部分其实也就是逻辑地址)
从默认的DS段中取出数据
MOV AX,CS:[1000H]
从指定的CS段中去除数据
(’[ ]'内指得就是偏移地址,“:”前面就是段的基地址,没有就是默认为DS)