汇编语言学习笔记 下载本文

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对于栈顶超界不会检查