控制转移指令
JMP label | 无条件转移指令 | 使程序转移到指定的目标地址处,从目标地址处开始执行指令 |
JCC label; | 有条件转移指令 | 条件满足,发生转移;条件不满足,顺序执行 |
- 直接寻址:转移地址像立即数一样,直接在指令的机器代码中
- 间接寻址:转移地址在寄存器或主存单元中
JCC的三种应用
判断单个标志位状态
- JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为0或相等
- JS和JNS,利用符号标志SF,判断结果为正还是负
- JO和JNO,利用溢出标志OF,判断结果是否溢出
- JP/JPE和JNP/JPO,利用奇偶标志PF,判断结果中1的个数为奇还是偶
- JC/JB/JNAE和JNC/JNB/JAE,利用进位标志CF,判断结果是否进位或借位
比较无符号数的高低
利用CF确定高低,利用ZF确定相等。
- 低于 JB
- 不低于 JNB
- 低于等于 JBE
- 不低于等于 JNBE
比较有符号数大小
利用OF和SF组合确定大小,利用ZF确定相等。
- 小于 JL
- 不小于 JNL
- 小于等于 JLE
- 不小于等于 JNLE
循环指令
循环指令默认使用CX作为计数器。
LOOP label | CX!=0,循环到label | |
LOOPZ label | CX!=0,ZF=1,循环到label | |
LOOPNZ label | CX!=0,ZF=0,循环到label |
子程序指令
主程序需要调用子程序时,采用CALL转移到子程序的起始位置,采用RET返回主程序继续执行。
proc用于声明子程序,格式如下:
子程序名 proc
中断指令
改变程序执行顺序的一种方法。
INT i8
系统功能调用
21H中断是DOS提供给用户的用于调用系统功能的中断。
使用步骤:
- AH设置系统功能调用号
- 在指定寄存器设置入口参数
- 执行指令INT 21H
- 根据出口参数分析功能调用执行情况
AH=02H;DL=字符的ASCII码 | 在显示器当前光标位置显示给定的字符 | 07H响铃,08H退格,0DH回车,0AH换行 |
AH=09H;DX=欲显示字符串首地址,以$结尾 | 在显示器输出给定字符串 | 回车、换行 |
AH=01H;AL=输入字符的ASCII码 | 获得按键的ASCII码 | |
AH=0AH;DS:DX=缓冲区首地址 | 字符串输入 | |
AH=3CH;DX=ASCIIZ串地址 CX=文件属性; | 建立文件,成功返回AX=文件代号 | |
AH=3EH;BX=文件代号 | 关闭文件 | |
AH=3FH;BX=文件代号;DX=数据缓冲区地址;CX=读取的字节数 | 读取成功:AX=实际读入的字节数 | 读取文件 |
AH=40H;参数同上 | 写文件 |
//输入字符串
buffer db 81//最多接收字符个数
db 0//存放实际输入的字符数
db 81 dup(0)//存放输入的字符串
mov dx,offset bbuffer
mov ah,0ah//0AH字符串输入功能
int 21h