汇编语言基础教程-指令:传送,交换,取地址
1.mov
如:
mov eax,20 ;把立即数20送入通用寄存器
mov edi,esi ;寄存器之间传递数据
mov dVar,20 ;把20送入内存操作数(变量)
mov WORD PTR [EBX],20 ;传送字到EBX指向的地址
mov [ebx],DWORD PTR [ESI] ;错误指令,两个操作数不能都是内存操作数,可改为两条指令完成这个需求
mov ds,0023h ;错误指令,立即数不能直接送段寄存器
mov ds,ss ;错误指令,两个段寄存器之间不能直接传送
mov cs,ax ;错误指令,CS段寄存器不能作为目标操作数
2.movzx
move with zero extend高位不足用0填充
源操作数的位数必须比目标操作数要少
源操作数不能是立即数
如:
mov eax,al
3.movsx
move with sign extend高位不足用符号位填充
源操作数的位数必须比目标操作数要少
源操作数不能是立即数
如:
mov al,82h
movsx bx,al ;此时bx为:0FF82H,BX的高八位设置为1
4.xchg
将原操作数与目的操作数的内容进行交换
两个操作数必须有一个是通用寄存器
如:
xchg eax,ebx
5.bswap
如:
bswap eax
该指令的意思是将eax的高字节和低字节的内容互换
中间两个字节的内容互换
操作数必须是一个32位寄存器
6.lea
把源操作数的有效地址传递给目标操作数
如:
lea eax,dvar
此指令与如下指令效果相同
lea eax,offset dvar
在内存中的代码分别为:
lea eax,[0040400a]
mov eax,0040400a
另:
lea指令能完成运算功能
mov eax,20
lea ebx,[eax+1] ;此时ebx为21
如在此处做乘法运算,乘数必须为1,2,4,8
7.lds,les,lfs,lgs
从内存操作数(源操作数)中取6个字节,
前面4个字节的内容作为一个双字送给目标操作数
后面两个字节送给DS或ES,FS,GS
假设FWORD类型的变量fVar的指向如下内存
00404040--->7d
00404041--->40
00404042--->40
00404043--->00
00404044--->23
00404045--->00
那么lds esi,fvar指令执行之后
esi中的内容为0040407dH
DS中的内容为0023H
在win32编程中很少用到段寄存器!!!
所以涉及到段寄存器相关的指令也很少见!!!