段的综述

image.png

数据段(.data)

image.png

DS[]

基本使用

DS是数据段的段寄存器,存放了段基址 []存放段偏移量 可以通过mov ds 寄存器的方式设置段寄存器的值

不能使用mov ds 数值的方式直接设置, 不能使用add ds 寄存器的方式直接设置, 原因和8086CPU的设计有关

练习

image.png

栈段

image.png

SSSP

  • 任意时刻,SS:SP指向栈顶元素
  • 任意时刻,SS段寄存器指向栈段开始的时候


push & pop

pushpop都是对于字(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等操作时,会顺带执行后面的任何类型的指令

问题

image.png
image.png