段的综述

数据段(.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等操作时,会顺带执行后面的任何类型的指令
问题


