学习汇编语言,指令系统经常忘记,记录一下。
8086为16位系统,也就是一个字长为16位
通用寄存器:
AH&AL=AX(accumulator)累加寄存器
BH&BL=BX(base)基址寄存器
CH&CL=CX(count)计数寄存器
DH&DL=DX(data)数据寄存器
段寄存器:表明某个段在主存中的位置,相当于基地址
CS(Code Segment)代码段寄存器
DS(Data Segment)数据段寄存器
SS(Stack Segment)堆栈段寄存器
ES(Extra Segment)附加段寄存器
专用寄存器:用来表明偏移地址,与上面的段寄存器相对应
IP(Instruction Pointer)指令指针寄存器
SP(Stack Pointer)堆栈指针寄存器
BP(Base Pointer)基址指针寄存器
SI(Source Pointer)源变址寄存器
DI(Destination Index)目的变址寄存器
标志寄存器:在8086CPU中,add、sub、mul、div、inc、or、and等它们大多都是运算(逻辑运算或是算术运算)指令,是影响标志寄存器的,而mov、push、pop等传送指令对标志寄存器一般没有影响,因为不会产生结果。
OF(overflow flag )溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1.
SF (sign Flag) 符号标志 记录运算结果的符号,结果负时为1.
ZF (zero flag) 零标志 运算结果等于0时为1,否则为0.
CF (carry flag) 进位标志 最高有效位产生进位时为1,否则为0.
AF (auxiliary carry flag) 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0.
PF (parity flag) 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0.
DF (direcion flag) 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.
IF (interrupt flag) 中断标志 IF=1时,允许CPU响应可屏蔽中断,否则关闭中断.
TF (trap flag) 陷阱标志 用于调试单步操作.
1、MOV
mov 段寄存器,通用寄存器
这个是固定的,如果目的地是段寄存器,源操作数只能是通用寄存器。
1)MOV WORD PTR[SI], 10F
这个的意思就是按字类型在[SI]中存储10F,而我们只能在地址中按字节存储,这时就需要再开辟一个地址。[SI]=0F ,[SI+1]=01
2、PUSH、POP、POPF、PUSHF
1) push ax
需要执行两步
(1)SP=SP-2(SP指向栈顶)
(2)将ax中的内容送到SS::SP指向的内存单元处。
2) pop ax
(1)将SS::SP指向的内存单元的数据送入ax中。
(2)SP = SP + 2
3)popf
POPF执行时,从堆栈中弹出一个字装入16字节标志寄存器中,指针下移两个字节单元。多用于保护现场和恢复现场。
4)pushf
PUSHF执行时,指针上移两个字节单元,装入16字节标志寄存器的内容
3、NEG(negative)求补指令,用来求补码
4、XCHG(exchange) 用于交换指定寄存器或内存单元的值,后面数的要求和mov一样
5、STD(Set Director)、 STI(Set Interupt)、CLD(Clear Director)、CLI(Clear Interupt)
6、XLAT() 查表转换指令
bx为首地址,al为偏移地址,最后数据送入al
7、shl opd,cl()逻辑左移 向左移动cl指定的次数
8、lea opd,ops (),传送偏移地址