数据传输指令:它们在存储器和寄存器、寄存器和输入输出端口之间传送数据。
1,通用数据传送指令
mov传送字或字节
movsx先符号扩展,在传送
movzx 先0扩展,再传送
push把字压入堆栈
pop把字弹出堆栈
pusha 把ax,cx,dx,bx,sp,bp,si,di依次压入堆栈
popa把di,si,bp,sp,bx,dx,cx,ax依次弹出堆栈
pushad把eax,ecx,edx,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-255,即0-FFH)
返回al为查表结果([bx +al]->al)
2,输入输出端口传送指令
inI/O端口输入(语法:in 累加器; {端口号 | dx})
out I/O端口输出(语法:out {端口号 | dx}; 累加器)
输入输出端口
由立即方式指定时,其范围是0-255;
由寄存器dx指定时,其范围是0-65535
3,目的地址传送指令
lea装入有效地址 例:lea dx, string; 把偏移地址存到dx
lds传送目标指针,把指针内容装入ds 例:lds si, string; 把段地址:偏移地址存到ds:si
les传送目标指针,把指针内容装入es 例:les di,string; 把段地址:偏移地址存到es:dl
lfs传送目标指针,把指针内容装入fs 例:lfs di,string; 把段地址:偏移地址存到fs:dl
lgs传送目标指针,把指针内容装入gs 例:lgs di,string; 把段地址:偏移地址存到gs:dl
lss传送目标指针,把指针内容装入ss 例:lss di,string; 把段地址:偏移地址存到ss:dl
4,标志传送指令
lahf标志寄存器传送,把标志装入ah
sahf标志寄存器传送,把ah内容装入标志寄存器
pushf标志入栈
popf标志出栈
pushd32位标志入栈
popd32位标志出栈