MOV DST,SRC
将某寻址方式指定的源操作数传送到某寻址方式指定的目的操作数中去。
注意:
MOV BL,BYTE PTR VAR1+5 ;如果var1不是字节类型则需要强制转型
MOV SI,OFFSET VAR2 ;属性操作符得到EA
MOV AX,ES:[SI] ;段前缀
LEA REG16,MEM
//将存储器某变量MEM的EA送入16位寄存器REG16中
LDS REG16,MEM
//将存储器某双字变量MEM的低16位送入位寄存器REG16中,高8位送入DS;
LES REG16,MEM
//将存储器某双字变量MEM的低16位送入位寄存器REG16中,高8位送入ES;
LAHF
;将PSW的低八位送入AH中
SAHF
;将AH内容送入PSW的低八位中
XCHG DST,SRC
;交换源和目的操作数的内容,可以是REG或者寻址方式指明的某存储单元
MOV AL,3
MOV BX,TABLE
XLAT
;将EA为(BX)+(AL)的存储器单元的内容送入AL
该指令经常用于查表。表中每一项对应的内容按顺序存在内存某单元,BX放表头EA,AL里放待查找的序号,XLAT即可查找出对应内容放入AL中。
PUSH SRC
;将SRC压栈
PUSHF
;将PSW压栈
POP DET
;出栈,送入DST
POPF
运算类指令会对PSW中的6个状态标志位产生影响
ADD DST,SRC
ADC DST,SRC
;ADD指令是直接加,ADC是带CF的加法,利用好ADC可以实现大于16位的加法
SUB DST,SRC
SBB DST,SRC
;基本同加法,SBB是带借位的减法
NEG DST
;取负数,即被减数为0,结果放在DST中
INC DST
DEC DST
;增量减量指令,将DST的内容增1或减1。DST可取通用REG或者存储单元;指令影响PSW中除CF外的五个标志位
CMP DST,SRC
;完成DST的内容减去SRC的内容,只设置PSW标志位而减法结果舍弃
一般使用CMP是为了比较两个数的大小、高低,并根据PSW结果跳转(条件跳转)
MUL SRC
;无符号数相乘
IMUL SRC
;有符号数相乘
SRC可取通用REG或者存储单元,可以是字节或者字(这决定了该乘法的类型):
MUL和IMUL只对PSW的CF位和OF位产生影响:
DIV SRC
;无符号数的除法
IDIV SRC
;有符号数的除法
SRC可取通用REG或者存储单元,可以是字节或者字(这决定了除法的类型):
有符号数的除法的商和余数也有符号:
除法指令不影响PSW中的标志位。
CBW
;将AL中的有符号数扩展到AX
CWD
;将AX中的有符号数扩展到DX、AX组合数
AAA
;加法分离BCD码调整
DAA
;加法组合BCD码调整
AAS
;减法分离BCD码调整
DAS
;减法组合BCD码调整
AAM
;乘法分离BCD码调整
AAD
;除法分离BCD码调整
AND DST,SRC
;逻辑与
TEST DST,SRC
;逻辑测试,完成逻辑与操作设置标志位但结果舍弃
OR DST,SRC
;逻辑或
XOR DST,SCR
;逻辑异或
NOT DST
;逻辑非
JMP LABEL
;转移到标号LABEL处执行程序
JMP REG16
;转移到由通用寄存器REG指定的位置执行程序
JMP MEM
;转移到由存储单元MEM指定的位置执行程序
在三种无条件转移指令中,根据LABEL位置、REG16和MEM内容的不同,有以下情况:
段内直接转移(近程转移)的实现方式:(CS)不变,(IP)=(IP)+ DISP,[IP 称为“当前IP”,指如果不转移,该转移指令的下一条指令的IP]
MOV CX,0010H ;在CX里存上循环次数
;这里写循环准备
标号:
;这里写循环体
LOOP 标号
MOV CX,10
;循环准备
L1:
;循环体
CMP AX,BX
LOOPZ L1;一旦AX!=BX,退出循环
LOOPZ指令只有当(CX)!= 0 且 ZF=1 时进行循环。
适用于在指定区域找不同,一旦找到一个不同就退出循环
和LOOPZ指令相反,该指令只有在(CX)!= 0 且 ZF=0 时进行循环。
适用于在指定区域查找指定量,一旦找到就退出循环
MOV CX,VAR1
JCXZ DONE
;循环准备
L1:
;循环体
LOOP L1
;循环后的处理
DONE:
;其他内容
当循环前给CX赋值时(CX)有为0的可能的时候,为避免(CX)=0而出现65536次循环,需要利用JCXZ在循环前检查CX是否为0,如果为0则跳到标号DONE的位置(即跳过循环)。
CALL LABEL
//调用入口地址标号为LABEL的子程序
CALL FAR PTR LABEL
//段间调用(段内调用时NEAR PTR可以省略)
CALL OPR
//调用入口地址为(OPR)的子程序
当使用第一种格式时,有三种情况:
当使用第二种格式时,根据OPR的不同,可分为:
RET
;用于段内子程序的返回,完成IP出栈
RETF
;用于段间子程序的返回,完成IP出栈,CS出栈
RET n
;完成前两项的功能后,(SP)=(SP)+n
过程名 PROC [类型]
;过程的内容
RET
过程名 ENDP
INT n
调用第n号中断,n为中断类型号,其值可以为0~255。执行该指令时,会:
IRET
该指令写在中断服务子程序中,用于返回主程序:IP、CS、PSW出栈
IN DST,SRC
//DST为指定读取数据的寄存器,SRC用于指定端口地址
OUT DST,SRC
//同上
NOP
;空操作指令:什么也不做,但要占用三个时钟周期
HLT
;暂停指令:是CPU进入暂停状态,某些条件时退出
WAIT
;等待指令:使CPU进入等待状态,某些条件时退出
LOCK <其他指令>
;总线锁定指令,保持总线的使用权
ESC
;换码指令:完成多处理器间指令和数据交换
<宏指令名> MACRO [<形式参数>]
//这里写宏体
ENDM