8086 存储组织

  • 8086 CPU有20条地址线,可以寻址的空间为$2^{20} = 1MB$
  • 256*4=1K 尽量别修改,这里是中断向量表
  • 设计的时候尽量让 段与段之间隔离
  • debug 默认情况下 四段合一

分段管理

  • 物理地址:存储器中的实际地址
  • 逻辑地址:采用段地址:偏移地址表示
  • 段地址存放在段寄存器中。
  • 1MB的地址空间最少可以分为16段,每个段64KB(段不重叠)
  • 1MB的地址空间最多可以分为65535段,每段16B(段不重叠)

逻辑地址转换成物理地址计算方法:

物理地址 = 段地址`* 0x10 + 偏移地址
0B34:01E0(逻辑地址) = 0B34 * 0x10 + 01E0 = B520(物理地址)

段寄存器

  • DS:数据段 DS:EA 取数据段中的数据
  • CS:代码段 CS:IP 取下一条指令
  • SS:堆栈段 SS:SP 栈顶指针数据
  • ES:附加段

386后扩展:

  • FS:windows中指向线程环境块teb
  • GS

段寄存器赋值

数据访问使用的是DS段
BP访问使用的是SS段

错误的做法:
mov dx,3000 

正确的做法:
mov  ax,3000
mov  dx,ax

段超越

没有段超越:默认使用 ds作为基址
mov byte ptr[0] ,4   ->ds+0



段超越: 使用es作为基址
es:
mov byte ptr[0] ,4   ->es+0

理论上 段超越可以使用mov byte ptr es:[0], 4来设置但是,debug不支持

Last modification:December 17, 2018
如果觉得我的文章对你有用,请随意赞赏