文章目录
一、数据传送类指令
1. mov
把一个字节、字或双字的操作数
从源位置传送至目的位置
8位(字节)数据,byte类型
mov al,200
16位(字)数据,word类型
mov ax,[ebx]
32位(双字)数据,dword类型
mov eax,dvar
立即数传送
mov reg/mem,imm
寄存器reg为目的操作数
mov al,200
;8位立即数i8
mov ax,200
;16位立即数i16
mov eax,200
;32位立即数i32
存储器mem为目的操作数
mov bvar,byte ptr 200
;8位立即数i8
mov [ebx],word ptr 200
;16位立即数i16
mov [esi+8],dword ptr 200
;32位立即数i32
寄存器传送
mov reg/mem/seg,reg
寄存器reg为目的操作数
mov al,ah
;8位通用寄存器r8
mov ax,bx
;16位通用寄存器r16
mov eax,edx
;32位通用寄存器r32
存储器mem为目的操作数
mov bvar,cl
;8位通用寄存器r8
mov [ebx],cx
;16位通用寄存器r16
mov [esi+8],edi
;32位通用寄存器r32
段寄存器seg为目的操作数
mov ds,bx
存储器传送
mov reg/seg,mem
寄存器reg为目的操作数
mov dl,bvar
;8位储存器m8
mov dx,[ebx]
;16位存储器m16
mov edx,dvar[edi]
;32位存储器m32
段寄存器seg为目的操作数
mov ds,wvar
;16位存储器m16
mov es,[ebx]
;16位存储器m16
mov ss,[ebp+8] ;16位存储器m16
段寄存器传送
mov r16/m16,seg
寄存器r16为目的操作数
mov ax,ds
mov dx,es
mov si,fs
mov di,gs
存储器m16为目的操作数
mov wvar,ds
mov [ebx],ss
mov [esi-8],cs
mov [ebp+8],cs
2.交换指令 XCHG
将源操作数和目的操作数内容交换
XCHG reg,reg/mem
(XCHG reg/mem,reg)
►通用寄存器与通用寄存器之间
►通用寄存器或存储器之间
32位数据交换
xchg esi,edi
xchg esi,[edi]
16位数据交换
xchg si,di
xchg si,[edi]
8位数据交换
xchg bl,bh
xchg al,bvar
空操作指令NOP
空操作指令是一条不做实质操作的指令
NOP ;= XCHG EAX, EAX
;一个字节的指令代码;90H
处理器执行需要化费时间,占用一个字节存储空间
所以,具有实际意义:
►实现短时间延时
►临时占用代码空间
3.地址传送指令LEA
LEA指令在指令执行时计算出偏移地址
►OFFSET操作符在汇编阶段取得变量的偏移地址
OFFSET无需在执行时计算、指令执行速度更快
►LEA指令能获取汇编阶段无法确定的偏移地址
lea edi, var
mov edi, offset var
二、算术运算类指令
见专栏
三、位操作类指令
1.逻辑运算指令
逻辑与指令AND
逻辑与(逻辑乘)运算规则
►两位都是逻辑1,则结果是1;否则,结果是0
逻辑与指令AND
►按位进行逻辑与,结果返回目的操作数
AND reg,imm/reg/mem
逻辑或指令OR
逻辑或(逻辑加)运算规则
►两位都是逻辑0,则结果是0;否则,结果是1 逻辑或指令OR
►按位进行逻辑或,结果返回目的操作数
OR reg,imm/reg/mem
逻辑非指令NOT
逻辑非(逻辑反)运算规则:
►原来为0的位变成1,原来为1的位变成0
逻辑非指令NOT:
►按位进行逻辑非,结果返回操作数
NOT reg/mem
;reg/mem←~reg/mem
NOT指令不影响状态标志位
逻辑异或指令XOR
逻辑异或(逻辑半加)运算规则:
►两位不同(相异),则结果是1;否则,结果是0 逻辑异或指令XOR:
►按位进行逻辑异或,结果返回目的操作数
XOR reg,imm/reg/mem
逻辑运算的屏蔽作用:
AND复位某些位(同0与),不影响其他(同1与)
and bl,11110110b ;BL中D0和D3清0,其余位不变
OR置位某些位(同1或),不影响其他(同0或)
or bl,00001001b ;BL中D0和D3置1,其余位不变
XOR求反某些位(同1异或),不影响其他(同0异或)
xor bl,00001001b ;BL中D0和D3求反,其余位不变
2.移位指令
逻辑左移指令 SHL
逻辑右移指令 SHR
算术左移指令 SAL
算术右移指令 SAR
S: Shift
L: Left
R: Right
A: Arithmetic
左移位指令SHL/SAL
SHL reg/mem,i8/CL
SAL reg/mem,i8/CL
;各位同时左移,最低位补0,最高位进入CF
;执行前AL=11110101B
SHL AL,1
;执行后AL=11101010B,CF=1
逻辑右移指令SHR
SHR reg/mem,i8/CL
;各位同时右移,最高位补0,最低位进入CF
;执行前AL=11110101B
SHR AL,1
;执行后AL=01111010B,CF=1
算术右移指令SAR
SAR reg/mem,i8/CL
;各位同时右移,最高位不变,最低位进入CF
CF
;执行前AL=11110101B
SAR AL,1
;执行后AL=11111010B,CF=1