汇编中的操作指令
表格不太会搞,,,将就着看吧。。。
算术运算指令
说明:小括号里是指令格式,后面是指令的功能,OPD是目的操作数,OPS是源操作数
1、加法指令
ADD加法(ADD OPD,OPS): OPD<—OPD+OPS
ADC带进位加法(ADC OPD,OPS): OPD<—OPD+OPS+CF
INC加1(INC OPD):OPD的内容加1,OPD可以是reg或mem,不影响CF的值
(reg:寄存器 mem:内存单元 imm:立即数)
2、减法指令
SUB减法指令(SUB OPD,OPS):OPD<—OPD-OPS
SBB带借位减法指令(SBB OPD,OPS):OPD<—OPD-OPS-CF
DEC减1指令(DEC OPD):OPD<—OPD-1
NEG求补指令【NEG OPD(OPD可以是reg或mem)】:对操作数OPD进行求补运算,即对操作数OPD连同符号位求反加1,并将结果送回OPD
对0求补时,CF=0,其他情况下CF=1
CMP比较指令(CMP OPD,OPS):CMP指令与SUB指令类似,将两个操作数相减,结果不送回OPD。改变标志位
3、乘法指令
MUL 无符号数的(MUL OPD):操作数可以是reg或mem,不能是立即数
OPD为8位时,AX<—(AL)*OPD AL是隐含操作数
OPD为16位时,(DX)(AX)<—(AX)*OPD 同理,AX是隐含操作数
IMUL 有符号数的:与无符号数的类似
4、除法指令
DIV 无符号除法(DIV OPD)和无符号数的乘法指令类似
IDIV 有符号数除法
逻辑运算指令
AND逻辑与(都为1时取1)
OR逻辑或(其1为1则取1)
NOT逻辑非(本来值的反值)
XOR逻辑异或(排斥相同,一个为0一个为1时结果为1)
TEST测试指令(进行逻辑与操作,结果不送回目的操作数,仅建立结果状态标志,可用来测试某位是否为0)
无符号数操作指令
指令 转移条件
JA/JNBE CF=0ANDZF=0 A>B
JAE/JNB CF=0 A>=B
JB/JANE CF=1 A<B
JBE/JNA CF=1ORZF=1 A<=B
带符号数转移指令
指令 转移条件
JG/JNLE ZF=0ANDSF=OF A>B
JGE/JNL SF=OF A>=B
JL/JNGE SF不等于OF A<B
JLE/JNG ZF=1ORSF不等于OF A<=B
其实意思就是
比如JA,当A>B时转移,否则继续执行下一条指令,
移位指令
一般移位:
SAL/SAR:算数左移/右移
SHL/SHR:逻辑左移/右移
算数左移和逻辑左移一样,操作数左移,最低位补0,最高位进CF
算数右移:操作数右移,最高位不变,最低位进CF
逻辑右移:操作数右移,最高位补0,最低位进CF
debug中用SHR和SHL
循环移位:
ROL OPD,OPS:不带进位循环左移
ROR OPD,OPS:不带进位循环右移
RCL OPD,OPS:带进位循环左移
RCR OPD,OPS:带进位循环右移
串操作指令
取串: 把源串当中si指向的字或字节送AX或AL
LODSB 取源串一个字节
LODSW 取源串一个字
存串
STOSB 送字节到目的串
STOSW 送字到目的串
串传送
MOVSB 字节传送
MOVSW 字传送
串比较
CMPSB 字节比较
CMPSW 字比较
串搜索
SCASB 搜索字节
SCASW 搜索字
重复前缀 REP