汇编指令汇总
一、数据传输指令
MOV 传送字或字节
MOVSX 先符号扩展,再传送
MOVZX 先零扩展,再传送
PUSH 把字压入堆栈
POP 把字弹出堆栈
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈
PUSHAD 把EAX,ECX,EBX,ESP,EBP,ESI,EDI依次压入堆栈
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈
BSWAP 交换32位寄存器里字节的顺序
XCHG 交换字或字节(至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG 比较并交换操作数。(第二个操作数必须为累加器AL/AX/EAX)
XADD 先交换在累加(结果在第一个操作数上)
XLAT 字节查表转换--BX指向一张256字节的表的起点,AL的表的索引值(0~FFH);返回AL为查表结果(【BX+AL】-》AL)
注释:AX,BX,CX,DX作为CPU内部的通用寄存器中的数据寄存器助记符用来存放参与运算的数据或是存储运算的结果,这四个寄存器都是16位的。
- AX寄存器称为累加器(Accumulator),使用时主要用于存放数据,如存放算术、逻辑运算中的操作数或结果,也可临时用于存放地址
- BX寄存器称为基址寄存器(BaseRegister),常用来存放访问存储器时的地址
- CX寄存器称为计数寄存器(CountRegister),常用来保存计算值,如在移位指令,循环(loop)和串指令中用作隐含的计数器。
- DX寄存器称为数据寄存器(DateRegister),常用来数据传递,在寄存器间接寻址中的I/O指令中存放I/O端口的地址。
- SP:堆栈寄存器Stack Pointer 存放栈的偏移地址。
- BP:基数指针寄存器BP(base pointer),是和堆栈指针SP联合使用的,作为SP校准使用的,在寻找堆栈里的数据使用到。
- SI,DI是源,目的变址寄存器
- EAX,EBX,ESI,EDI等等同AX,BX,SI等一样都是寄存器,但是32位。
MOV示例:
MOV......AL,20H;将8位立即数20H传送到AL中。
MOV......AX,1234H;将16位立即数1234H传送到AX中。
MOV......EAX,34568020H;将32位立即数34568020H传送到EAX中。
例:
PUSH bp //保存bp指针
MOV bp,sp //将sp指针传给bp指针,此时bp指向的是sp地址
。。。。。。。程序结束
MOV sp, bp //将原sp指针传回给sp
POP bp //恢复原bp的值
ret //推出子函数