基本指令
这一篇主要介绍汇编中的基本指令,所谓基本,就是汇编中最常用且不可或缺的指令,就像在学习高级语言时我们常常先学习基本的赋值、输入输出方式那样。
赋值指令
汇编语言的赋值指令MOV可以看成其他高级语言中的“==”指令
使用方法为
;把寄存器BX中的值给AX
MOV AX,BX
;把变量A中的值放入寄存器AX中
MOV AX,A
示例
算术运算指令
算术运算指令介绍几个常用的运算,以下DST是目的操作数的缩写,SRC是源操作数的缩写
加法指令
加法分为一般的加法(无进位)和带进位加法
(1)ADD 加法
使用方式:ADD DST,SRC
执行的操作:(DST)<==(SRC) + (DST)
例如:AX=1,BX=1 执行ADD AX,BX后AX=2,BX=1
(2)ADC 带进位加法
带进位加法与一般的加法指令不同,要考虑进位也就是CF位
使用方式:ADC DST,SRC
执行的操作:(DST)<==(SRC) + (DST) + CF
(3)INC 加1
这条指令有点像高级语言中的“++”运算符
使用方式:INC (OPR)
执行的操作:(OPR)<==(OPR) + 1
在我阅读的汇编语言教材中还有XADD这一条指令,由于我没有使用过,就不在文章中写出来了。
减法指令
减法分为一般的减法(无借位)和带借位减法
(1)SUB 减法
使用方式:SUB DST,SRC
执行的操作:(DST)<==(DST) - (SRC)
(2)SBB 带借位减法
使用方式:SBB DST,SRC
执行的操作:(DST)<==(DST) - (SRC) - CF
(3)DEC 减1
类似高级语言中的“--”运算符
使用方式:DEC OPR
执行的操作:(OPR)<==(OPR)-1
(4)NEG 求补
使用方式:NEG OPR
执行的操作:(OPR)<==(OPR)
(5)CMP 比较
CMP和SUB指令一样都进行减法操作,但和SUB指令不同的是,CMP指令不会将结果保存下来,只是根据结果设置对应标志位的值。在之后讲到条件转移时,我们会经常用到这条指令。
使用方式:CMP OPR1,OPR2
执行的操作:(OPR1) - (OPR2) 结果不会被保存
涉及到乘法除法的操作时,我们就需要考虑带符号数和无符号数的区别
乘法指令
(1)MUL 无符号数乘法
使用方式:MUL SRC
执行的操作:
对字节操作数:(AX)<==(AL)*(SRC)
对字操作数:(DX,AX)<==(AX)*(SRC)
(2)IMUL 带符号数乘法
与MUL指令执行的操作相同,因此不赘述,但注意运算的对象必须是带符号数。
除法指令
(1)DIV 无符号数除法
使用方式:DIV SRC
执行的操作:
对字节操作数:(AL)<==(AX)/(SRC)的商
(AH)<==(AX)/(SRC)的余数
对字操作数:(AX)<==(DX,AX)/(SRC)的商
(DX)<==(DX,AX)/(SRC)的余数
(2)IDIV 带符号数除法
使用方式:IDIV SRC
执行的操作:和DIV指令相同,但是操作数必须是带符号数,商和余数也是带符号数能,余数和被除数的符号相同
逻辑运算指令
逻辑与 AND
将两个操作数各位进行与操作,其中与的规则为:1&1=1,1&0=0,0&1=0,0&0=0(可以记为有0得0,全1得1)
使用方式:AND DST,SRC
执行的操作:(DST)<==(DST)^(SRC)
逻辑或 OR
将两个操作数各位进行或操作,其中与的规则为:1||1=1,1||0=1,0||1=1,0&0=0(可以记为有1得1,全0得0)
使用方式:OR DST,SRC
执行的操作:(DST)<==(DST)∨(SRC)
逻辑非 NOT
非操作就是将二进制位的数1变0,0变1
使用方式:NOT OPR
执行的操作:将操作数OPR取反后放到原来的位置
TEST指令
这是一条很重要的指令,如果你想要测试两个操作数逻辑与的结果,而不希望保存这个结果,那么使用TEST指令
使用方式:TEST OPR1,OPR2
执行的操作:(OPR1)^(OPR2)
移位指令
移位指令实在有些复杂,有逻辑左/右移,循环左/右移,算术左/右移,这些名词听起来就觉得脑袋晕晕的,我认为分辨这些指令最好的方式就是画图!!!
逻辑左移
SHL
使用方式:SHL OPR,CNT
说明:这里和下面的CNT指的是移位次数,当移位次数等于1时可以直接写出(即采用立即数的方式),大于1时一般把CNT存放在CL寄存器中
逻辑右移
SHR
使用方式:SHR OPR,CNT
循环左移
ROL
使用方式:ROL OPR,CNT
循环右移
ROR
使用方式:ROR OPR,CNT
带进位循环左移
RCL
使用方式:RCL OPR,CNT
带进位循环右移
RCR
使用方式:RCR OPR,CNT
2 条评论
痛苦回忆call back
痛苦并痛苦着