8086寄存器组
通用寄存器:
EAX: (Accumulator) 累加器. 也被IO指令使用.
EBX: (base) 计算存储器地址时常用作基址寄存器.
ECX: (count) 在移位.循环.串处理指令中用作隐含的计数器.
EDX: (data) 做双字长的运算时.和AX连用. 另外.它存放IO端口地址.
变址寄存器:
ESP: (Stack Point) 堆栈指针寄存器. 指示段顶的偏移地址.
EBP: (Base Point) 基址指针寄存器. 可与SS连用确定堆栈段中的某一地址.
EDI: (Destination Index) 目的变址寄存器. DI 和 ES连用.
ESI: (Source Index) 源变址寄存器. SI 和 DS 连用.
专用寄存器:
EIP: 指令指针寄存器. 与CS连用确定下一条指令的地址.
EFLAGS: 标志寄存器.常用标志如下:
OF 溢出 SF 符号 ZF 零 CF 进位 AF 辅助进位(第3位进位) PF 奇偶(结果的1的个数)
DF 方向 TF 陷阱(调试时若置位则每条指令后产生陷阱) IF 中断(1表示允许相应可屏蔽中断)
段寄存器:
CS: (code segement) 代码段
DS: (data segement) 数据段
ES: (extra segement) 附加段
SS: (stack segement) 堆栈段
FS: 80386后增加的附加数据段
GS: 80386后增加的附加数据段
实模式存储器寻址
用来解决16位字长的机器里提供20位地址的问题.
解决的办法是分段. 20位物理地址由16位段地址和16位偏移地址组成.
段地址是一个段的起始地址(低4位为0).又称段基地址.
段 偏移
cs ip
ss sp bp
ds bx di si 或一个16位数
es di
80x86指令系统和寻址方式
寻址方式
立即数 如 5H
寄存器 如 AX
直接寻址 如 [2000H]
寄存器间接寻址 如 [BX] ,当寄存器用EBP或ESP时.段寄存器为SS. 否则段寄存器为DS.
寄存器相对寻址 如 COUNT[SI]. 或 [COUNT+SI]
基址变址寻址: 如 [BX][DI] 或 [BX + DI]
相对基址变址寻址 如 COUNT[BX][DI] 或 [COUNT + BX + DI]
比例变址寻址 如 COUNT[ESI*4]
转移地址
段内直接:如:
JMP NEAR PTR PROGIA
JMP SHORT QUEST
其中PROGIA 和 QUEST 为断内符号地址. 在机器指令中它是一个位移量. 用IP和位移量的和做IP值.
NEAR 和 SHORT 表示近转移和短转移.
段内间接: 如:
JMP BX
JMP WORD PTR[BP+TABLE]
用寻址到的内存单元的值做IP值. 第2句的WORD PTR表示这是一个字的有效地址.
段间直接: 如:
JMP FAR PTR NEXT
其中FAR PTR 表示段间转移. 它用NEXT符号地址的偏移值做IP值.用NEXT的段地址做CS值.
段间间接: 如:
JMP DWORD PTR[INTERS+ BX]
其中DOWRD PTR 是双字操作符.表示在该地址上取双字. 其中一个字放入IP.一个字放入CS.