字单元
即存放一个字型数据(16位)的内存单元, 由两个地址连续的内存单元组成。高地址内存单元存放字型数据的高位字节,低地址单元存放字型数据的地位字节。
DS和【adress】
8086CPU中的DS寄存器,通常用来存放要访问数据的段地址。比如我们要读取10000H单元的内容,可以用如下的程序段进行
mov bx,1000H mov ds,bx mov al,[0]
"[...]"中的0表示内存单元的偏移地址,指令执行时,8086cpu会自动从ds中取出段地址
8086cpu不支持将数据直接送入段寄存器的操作,ds是一个段寄存器,所以
mov ds,1000H纸条指令非法,需要用一个寄存器来进行中转。
数据段
cpu提供的栈机制
push ax 将寄存器ax中的数据送入栈
pop ax 从栈顶取出数据送入ax
8086cpu入栈和出栈都是以字位单位进行的
栈
任意时刻,SS,SP指向栈顶元素。push指令和pop指令执行时,CPU从SS和SP中得到栈顶的地址
栈空,SS:SP指向栈空间最高地址单元的下一个单元
8086CPU,入栈时,栈顶从高地址向低地址方向增长
mov ax, 1000H mov ds, ax ;内存单元的段地址要放在ds中 push [0] ;将1000:0处的字压入栈中 pop[2] ;出栈,出栈的数据送入1000:2处
push指令执行步骤
- sp = sp - 2
- 向ss:sp指向的字单元中送入数据
pop指令执行步骤
- 1.从ss:sp指向的字单元中读取数据
- 2.sp=sp+2