CS和IP
8086CPU的工作过程可以简要描述如下:
1) 从CS:IP指向的内存单元处读取指令,读取的指令进入指令缓冲器; 2) IP=IP+所读取指令的长度,从而指向下一条指令; 3) 执行指令,转到步骤1,重复这个过程.
修改CS、IP的指令
“jmp 段地址 : 偏移地址”指令的功能为: 用指令中给出的段地址修改CS,偏移地址修改IP.
“jmp 某一合法寄存器”: 用寄存器的值修改IP.
第三章 寄存器(内存访问)
内存中字的存储
字单元,即存放一个字型数据(16位)的内存单元.
一个字在内存中存放的时候占用2个地址连续的内存单元,字的低位字节存放在低地址单元,高位字节存放在高地址单元。
字所存放的低地址内存单元的地址作为字的起始地址,我们将起始地址为N 的字单元简称为N地址字单元.
任何两个地址连续的内存单元,N号单元和N+1号单元,可以将他们看成两个内存单元,也可以看成一个地址为N的字单元.
DS和[address]
从内存单元到寄存器的格式是: “mov 寄存器名,内存单元地址”; 从寄存器到内存单元则是: “mov 内存单元地址,寄存器名”. mov指令的形式还有:
mov 寄存器,数据mov 寄存器,寄存器 mov 段寄存器,寄存器mov 寄存器,段寄存器 mov 内存单元,段寄存器mov 段寄存器,内存单元 add,sub指令基本和mov相同
CPU提供的栈机制
8086CPU中,有两个寄存器,段寄存器ss和寄存器sp,栈顶的段地址放在ss中,偏移地址存放在sp中.
任意时刻,ss:sp指向栈顶元素.
入栈时,栈顶从高地址向低地址方向增长.
栈空,ss:sp指向栈空间最高地址单元的下一个单元.
push操作——单操作数指令 格式:push 源操作数 功能:将源操作数内容压栈 操作过程:
sp=sp-2,ss:sp指向当前栈顶前面的单元,以当前栈顶前面的单元作为新的栈顶;
将源操作数内容送入ss:sp指向的内存单元处,ss:sp此时指向新栈顶.
pop操作——单操作数指令 格式:pop 目的操作数
功能:将栈顶内容出栈,送入目的操作数
操作过程:
将ss:sp指向的内存单元的数据送入目的操作;
sp=sp+2,ss:sp指向当前栈顶下面的单元,以当前栈顶下面的单元作为新的栈顶.
弹栈后,数据依然存在,但已不在栈中,可写入新的数据进行覆盖.
栈段继承了段的属性: 长度小于等于64K
地址连续,起始地址为16的倍数
栈满的时候使用push,栈空的时候使用pop,都将发生栈顶超界的问题 CPU对于栈顶超界不会检查