段的综述
数据段(.data)
DS
和[]
基本使用
DS
是数据段的段寄存器,存放了段基址[]
存放段偏移量 可以通过mov ds 寄存器
的方式设置段寄存器的值不能使用
mov ds 数值
的方式直接设置, 不能使用add ds 寄存器
的方式直接设置, 原因和8086CPU
的设计有关
练习
栈段
SS
和SP
- 任意时刻,
SS:SP
指向栈顶元素- 任意时刻,
SS
段寄存器指向栈段开始的时候
push & pop
push
和pop
都是对于字(2Bytes)进行操作的
push ax
分为两步
- 将
SP = SP - 2
,栈向下生长- 将
ax
中的值拷贝到栈内存上
pop ax
分为两步
- 将
SS:SP
所在内存地址的字单元的值(16位)拷贝到寄存器ax
中- 将
SP =SP+2
, 栈向上增长, 注意,此时原来SS:SP
指向的值不释放,而是等待后续push
指令对其的覆盖
空栈
栈内存为空时,比如我们划定
10000H - 1FFFEH
处为我们的栈段, 由于栈向下生长,在栈空的时候,**SS:SP**
应该是指向栈段的第一个内存单元的上一个内存单元,这里第一个内存单元的地址是1FFFEH
, 因此空栈时,SS:SP
指向1000:FFFF
处
实验
关于
display
命令, 我们使用-d 1000:0
获取从10000H
开始的连续的128B
的内存空间的内容的时候,d
命令接收一个参数1000:0
, CPU执行d
命令的时候,会将1000
传入ds
段寄存器中,并通过[0]
访问10000H
处的内存单元 在我们对SS
段寄存器进行诸如mov ss,bx
,mov ss, [0]
和pop ss
等操作时,会顺带执行后面的任何类型的指令