寄存器
基本寄存器(8086)
1:数据寄存器,一般称之为通用寄存器组
8086 有8个8位数据寄存器
这些8位寄存器可分别组成16位寄存器:
AH&AL=AX:累加寄存器,常用于运算;
BH&BL=BX:基址寄存器,常用于地址索引;
CH&CL=CX:计数寄存器,常用于计数;
DH&DL=DX:数据寄存器,常用于数据传递。
2:地址寄存器/段地址寄存器
为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:
CS(Code Segment):代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器
3:特殊功能的寄存器
IP(Instruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程
SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置
BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置
SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针
DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。
关于栈
ESP: 栈指针寄存器(extended stack pointer) - 指向系统栈最上面一个栈帧的顶部(也是整个栈的顶部)
EBP: 基址指针寄存器(extended base pointer) - 指向系统栈最上面一个栈帧的底部
ESP与EBP之间的内存空间为当前栈帧。
EIP: 指令寄存器(extended instruction pointer) - 存放一个指针,指向等待执行的指令地址。
不常用指令
1 | CLD ;clear flag DF |
跳转相关指令
1.无条件跳转
1 | jmp ;无条件跳转 |
2.根据CX、ECX寄存器的值进行跳转
1 | JCXZ ;CX 为 0 则跳转 |
3.根据标志位进行跳转
1 | JE ;等于则跳转 |
概念
文件偏移地址 = 虚拟内存地址(VA)-装载基址(Image Base)-节偏移