目录
一、无条件转移指令JMP
指令格式:JMP 目标地址
功能:JMP可以使程序无条件地跳转到程序在存储器中某目标地址。
注意:(1)指令目标地址若在JMP指令所在的代码段内,属段内跳转(短转移8位和近转移16位),指令只修改IP内容,指令目标地址若在JMP指令所在的代码段外,属段间跳转,CS及IP都需要修改(2)无条件跳转指令在执行结果中不影响标志位。
二、条件转移指令JCC
指令格式:JCC 标号
注意:条件转移指令JCC只能转移段内的短转移8位(0~255)。
JCC的指令分类很广泛,可以分为三类:(1)判断单个标志位状态(2)比较无符号数高低(3)比较有符号数大小;这三类均不影响标志位,但要利用标志位。
1.判断单个标志位状态
(1)JZ/JE和JNZ/JNE
利用零标志ZF,判断结果是否为零或相等。
(2)JS和JNS
利用符号标志SF,判断结果是正是负。
(3)JC和JNC
利用进位标志CF,判断结果是否进位或借位。
例题:寄存器AL中数据为负数,则令AH=-1,否则令AH=0
CMP AL,0
JS L1
MOV AH,0
JMP L2
L1:MOV AH,-1
L2:HLT
2.比较无符号数高低
(1)JB/JNAE:低于/不高于等于
(2)JNB/JAE:不低于/高于等于
(3)JBE/JNA:低于等于/不高于
(4)JNBE/JA:不低于等于/高于
例题:AL和BL求大数;并赋值给MAX。
CMP AL,BL
JA L1
MOV MAX,BL
JMP L2
L1:MOV MAX,AL
L2:HLT
3.比较有符号数大小
(1)JL/JNGE:小于/不大于等于
(2)JNL/JGE:不小于/大于等于
(3)JLE/JNG:小于等于/不大于
(4)JNLE/JG:不大于等于/大于
例题:AL和BL求小数;并赋值给MIN。
CMP AL BL
JL L1
MOV MIN,BL
JMP L2
L1:MOV MIN,AL
L2:HLT
三、循环指令LOOP、LOOPZ、LOOPNZ
88/86针对CX计数器的计数循环指令。
(1)LOOP
格式:LOOP label
操作:(1)CX=CX-1(2)若CX不等于0,转到label出执行相关代码;否则退出循环,执行LOOP后面的指令
(2)LOOPZ
格式:LOOPZ label
操作:(1)CX=CX-1(2)若CX不等于0且ZF=1,则转至label处执行;否则退出循环,执行LOOPZ后面的指令。
(3)LOOPNZ label
格式:LOOPNZ label
操作:(1)CX=CX-1(2)若CX不等于0且ZF=0,则跳到label处执行;否则退出循环,执行LOOPNZ后面的指令。
例题:求100以内序数求和,存入AX
XOR AX,AX
MOV BX,1
MOV CX,100
L1:ADD AX BX
INC BX
LOOP L1
四、子程序指令
子程序是完成特定功能的一段代码,主程序采用CALL调用指令转移到子程序的起始处执行,运行完子程序后,采用RET指令回到主程序继续执行。
五、系统功能调用
1.09H号DOS功能调用
主要作用是在屏幕上输出一个字符串
(1)功能调用号:AH=09H
(2)入口参数:
DS:DX=显示字符串在内存中的首地址;
内存中的字符串,必须用一个’$‘字符结尾
(3)功能调用:INT 21H
(4)出口参数:无
2.01H号DOS功能调用
主要功能是键盘接收一个字符
(1)功能调用号:AH=01H
(2)入口参数:无
(3)功能调用:INT 21H
(4)出口参数:AL=键盘接收字符的ASCII码
3.02H号DOS功能调用
主要功能是输出一个字符
(1)功能调用号:AH=02H
(2)入口参数:DL=显示字符的ASCII码
(3)功能调用:INT 21H
(4)出口参数:无
例题:将键盘输入的小写字母转换成大写字母并输出显示,直到输入字符以“#”结束,如果输入的不是小写字母时要显示错误提示“PLEASE INPUT AGAIN”
NEXT:MOV AH 1
INT 21H
CMP AL ‘#’
JE EXIT
CMP AL ‘a’
JB ERR
CMP AL 'z'
JA ERR
SUB AL,20H
MOV DL ,AL
MOV AH,2
INT 21H
JMP NEXT
ERR: LEA DX,ERROR
MOV AH,9
INT 21H
JMP NEXT
EXIT:MOV AH,4CH;(返回DOS也就是结束)
INT 21H
4.25H号DOS功能调用
功能:设置中断类型号为N的中断服务程序的入口地址,存入DS:DX。
MOV DX,OFFSET SERV;SERV为中断服务子程序的名称
MOV AX,SEG SERV
MOV DS,AX
MOV AL,N
MOV AH,25H
INT 21H
5.35H号DOS功能调用
功能:获取中断类型号为N的中断向量ES:BX,并存入变量INTOFF和INTSEG中。
MOV AL,N
MOV AH,35H
INT 21H
MOV INTOFF,BX
MOV INTSEG,ES