一、串操作
1)MOVSB/MOVSW ; (ES:[DI]<-DS:[SI])
2)STOSB/STOSW ; (ES:[DI]<-AL/AX)
3)LODSB/LODSW ; (AL/AX<-DS:[SI])
REP + 1)/2)/3) ;
(DF控制方向,CX控制次数)
注:1、2、3一次执行一个操作,与rep联用实现多个操作;
4)CMPSB/CMPSW ; (DS:[SI] - ES:[DI])
5)SCASB/SCASW ; (AL - ES:[DI])
REPE/REPZ + 4)/5) ; (ZF/CF = 0, 停止执行)
REPNE/REPNZ + 4)/5) ; (ZF=1/CF=0,停止执行)
二、中断指令
1)INTO ; (OF=0,产生4号中断)
2)IRET ; (中断返回)
3)INT n ; (中断调用)
常用中断指令:
1.MOV AH,9 ; (显示以'$'结尾字符串,入口DS:DX)
INT 21H
2.MOV AH,1 ; (单个键入字符-->AL)
INT 21H
*3.
MOV
AH,10 ; (输入字符串)
INT 21H
4.
MOV
AH,2 ;
(输出单个字符,入口地址DL)
INT 21H
注:3.例:DATA DB 64 ; (定义缓冲区长度)
DB ? ; (系统填写字符串实际长度,回车作字符串结束标志)
DB 20 DUP(?) ; (字符串实际储存区域)
MOV DX,OFFSET DATA
MOV AH,0AH ; (写入第二个字节中)
INT 21H
注:中断指令常与LEA、OFFSET指令联用,用于设置中断操作的入口地址;
三、调用和返回
1)CALL + (far ptr )label
压入IP(段内);
压入CS、IP(段间);
2)RET (+ num)
弹出IP(段内)(SP+2(+num));
弹出CS、IP(段间)(SP+4(+num));
注:与CALL联用,调用已经定义的子程序,返回为段内还是段间由CALL决定;
四、转移指令
1)JMP 标号 ; 段内转移
JMP FAR/NEAR PTR 标号 ; (FAR,改变CS、IP;NEAR,改变IP)
JMP R16/M16 ; (IP<-R16/M16)
2)判断标志位
JZ/JNZ
JS/JNS
JO/JNO
JP/JNP
JC/JNC
JCXZ
JC/JNC
JCXZ
3)判断数大小
无符号数:
(
G大,L小,E等,N不
)
JA/JNBE ; (大于,不'小于等于)
JNA/JBE ; (不大于,小于等于)
JB/JNAE ; (小于,不'大于等于)
JNB/JAE ; (不小于,大于等于)
有符号数:(
G大,L小,E等,N不)
JG/JNLE ; (大于,不'小于等于)
JNG/JLE ; (不大于,小于等于)
JL/JNGE ; (小于,不'大于等于)
JNL/JGE ; (不小于,大于等于)
(注:比较的值是CMP的两个操作数)
五、循环指令
1)LOOP label
;
CX!=0,转移;
2)LOOPZ label
;
CX != 0 && ZF = 1,转移;
3)LOOPNZ label
;
CX != 0 && ZF = 0,转移;
4)JCXZ label
;
CX=0,转移;
(循环指令不影响标志位)
(内层循环应完全包含在外层内)
六、伪指令
1)ASSUNME+段寄存器:段名
2)SEGMENT+段名
段名+ENDS(成对出现)
3)ENDS(程序结束)
4)宏指令:
MICRO NAME 形参
……
代码
……
ENDM
调用:NAME 实参
(宏会在调用时自动展开,编译时代码长度和原来一样)