Z目录
MOVSX reg16\32,reg8\reg16\mem8\mem16
1数据传送指令
1.1MOV指令:
把源操作数的值resourse复制到目的操作数
MOV target,resourse;
注意:
1target不可为CS(代码段不可写,只可读)
2target和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)
3不能将立即数传送给段寄存器
4target和source必须类型匹配,比如,要么都是字节,要么都是字或者都是双字等。
1.2XCHG(交换)
两个寄存器,寄存器和内存变量之间内容的交换
XCHG object1,object2;交换object1与object2的值
注:
1)不能直接交换两个内存数的值
2)类型必须匹配
3)两个操作数任何一个都不能是段寄存器
4)必须是通用寄存器(ax、bx、cx、dx、si、di)或内存数
XCHG ax,[bx][si];
XCHG ax,bx;
2地址传送指令
2.1LEA(装入有效地址)
LEZ reg16,mem;
将把存储单元的16位有效偏移地址MEM的值装入到16位的通用寄存器中。
假定bx=5678H,EAX=1,EDX=2
LEA si,2[BX] ;SI=BX+2=5678X+2=567AH
LEA di,2[EAX][EDX] ;DI=EAX+EDX+2=1+2+2=5
这里装入的是有效偏移地址,并不是实际的内存中的数值,如果要想取内存中该地址对应的数值,还需要加上段地址才行
2.2LDS(取数据段寄存器指令)
有效地址MEM的值,到16位的通用寄存器中。将双字指针送到寄存器和DS
这里装入的是值,不是有效地址把内存4个单元的32位数,分别送到段寄存器DS和由DST指出的偏移量寄存器。
LDS reg16,mem32 ;
reg16等于mem32的低字,而DS对应于mem32的高字
2.2LES(取附加段寄存器指令)
LES reg16,mem32 ;
reg16等于mem32的低字,ES对应于mem32的高字
用来给一个段寄存器和一个16位通用寄存器同时复制。
3堆栈操作指令
位于内存的堆栈段中,是内存的一部分,具有“先进后出”的特点,
堆栈只有一个入口,即当前栈顶,
当堆栈为空时,栈顶和栈底指向同一内存地址
在汇编语言中,堆栈操作的最小单位是字,也就是说,只能以字或双字为单位,同时,SS:SP指向栈顶(SS为堆栈段寄存器,SP为堆栈指针,二者一相加,就构成了堆栈栈顶的内存地址)。
3.1PUSH(进栈)
将通用寄存器/段寄存器/内存数/立即数的值 压入栈中
PUSH reg16(32)/seg/mem16(32)/imm;
SP=SP-2 SS:[SP]=16位数值(当将32位数值压入栈中时,SP=SP-4,SS:[SP]=32为数值)
3.2POP(出栈)
将堆栈口的16(32)位数据推出到通用寄存器/段寄存器/内存中,
POP reg16(32)/seg/mem16(32);//不能出栈到CS中
寄存器/段寄存器/内存= SS:[SP] SP=SP+2(当将32位数值出栈时,SP=SP+4)(注意,不能出栈给立即数哦,常量不可变嘛)
3.3PUSHA、PUSHAD、POPA、POPAD
将所有16/32位通用寄存器进栈/出栈
POPAD PUSHAD一样,只不过是32位的罢了。
3.4PUSHF、PUSHFD、POPF、POPFD
标志寄存器FLAGS(EFLAGS)进栈或出栈
PUSHF ;FR寄存器推入堆栈
POPF; 栈顶字出栈到FLAGS
POP 和PUSH通常可以用来交换两个寄存器的值,也可以用来保护寄存器的值,如下:
交换ax与cx的值:push ax;push cx;pop ax; pop cx;
保护寄存器:push ax;push cx;….中间有很多执行的代码…pop cx;pop ax;
3.5LAHF\SAHF(标志寄存器传送指令)
4 算术指令
4.1ADD(加法)
ADD reg/mem,reg/mem/imm;
将后面的操作数加到前面的操作数中
两个操作数必须类型匹配,并且不能同时是内存操作数
OPRD1: REG、 MEM
OPRD2: REG、 MEM、 im
4.2ADC (带进位加法)
ADC reg/mem, reg/mem/imm ;
dest=dest+src+cf
当CF=0时 ADD与ADC的作用是相同的。
实现64位数EDX:EAX与ECX:EBX的加法:
Add EAX,EBX;
ADC EDX,ECX;
4.3INC(自加一)
将操作数的内容加1后,再送回该操作数中。
INC reg/mem;
dest=dest+1;
4.4XADD(交换加)
先将两个数交换,然将二者之和送给第一个数
XADD reg/mem, reg;
4.5SUB(不带借位减法)
两个操作数相减&