控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变
控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令
重点掌握:JMP/Jcc/LOOP CALL/RET
INT n/IRET 常用系统功能调用
一般了解: LOOPZ/LOOPNZ INTO
JMP label ;程序转向label标号指定的地址
段内直接寻址 JMP NEAR PTR NEXT
段内间接寻址 JMP TABLE [ BX ]
段间直接寻址 JMP FAR PTR NEXT
段间间接寻址 JMP DWORD PTR [ BX ]
段内转移——近转移(near)
在当前代码段64KB范围内转移( ±32KB范围)
不需要更改CS段地址,只要改变IP偏移地址
段内转移——短转移(short)
转移范围可以用一个字节表达,在段内-128~+127范围的转移
段间转移——远转移(far)
从当前代码段跳转到另一个代码段,可以在1MB范围
需要更改CS段地址和IP偏移地址
目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址
JMP NEAR PTR NEXT 近转移 -32768 ~ +32767
JMP SHORT NEXT 短转移 -128 ~ +127
条件转移指令
Jcc label ;条件满足,发生转移:IP←IP+8位位移量 ;条件不满足,顺序执行
16条指令分成3种情况:
1. 判断单个标志位状态
2. 比较无符号数高低
3. 比较有符号数大小
这组指令单独判断5个状态标志之一
⑴JZ/JE和JNZ/JNE: 利用零标志ZF,判断结果是否为零(或相等)
⑵JS和JNS: 利用符号标志SF,判断结果是正是负
⑶JO和JNO: 利用溢出标志OF,判断结果是否产生溢出
⑷JP/JPE和JNP/JPO: 利用奇偶标志PF,判断结果中“1”的个数是偶是奇
⑸JC/JB/JNAE和JNC/JNB/JAE: 利用进位标志CF,判断结果是否进位或借位
无符号数的大小用高(Above)低(Below)表示 利用CF确定高低、利用ZF标志确定相等(Equal) 两数的大小分成4种关系:
⑴ 低于(不高于等于):JB(JNAE,JC) < jump if blow
⑵ 不低于(高于等于):JNB(JAE,JNC) >= jump if not blow
⑶ 低于等于(不高于):JBE(JNA) <= jump if blow or equal,or above
⑷ 不低于等于(高于):JNBE(JA) > jump if above
有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal) 两数的大小分成4种关系:
⑴ 小于(不大于等于):JL(JNGE) < jump if less
⑵ 不小于(大于等于):JNL(JGE) >=
⑶ 小于等于(不大于):JLE(JNG) <=
⑷ 不小于等于(大于):JNLE(JG ) >
(5)-3 循环指令(loop)
JCXZ label ;CX=0,转移到标号label
LOOP label ;CX←CX-1, ;CX≠0,循环到标号label
LOOPZ label ;CX←CX-1, ;CX≠0且ZF=1,循环到标号label
LOOPNZ label ;CX←CX-1, ;CX≠0且ZF=0,循环到标号label
循环指令默认利用CX计数器,方便实现计数循环的程序结构
label操作数采用相对寻址方式
(5)-5 中断指令
中断(Interrupt )是又一种改变程序执行顺序的方法
中断的指令有3条: INT i8 IRET INTO
主要分成外部中断和内部中断
外部中断——来自CPU之外的原因引起的中断,又可以分成
内部中断——CPU内部执行程序引起的中断,又可以分成:
INT i8 ;中断调用指令:产生i8号中断
IRET;中断返回指令:实现中断返回
INTO;溢出中断指令:;若溢出标志OF=1,产生4号中断 ;否则顺序执行
系统功能调用
21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能
ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序
汇编语言程序设计需要采用系统的各种功能程序
充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握
DOS功能调用INT 21H 功能号:
AH=02H
入口参数:DL=字符的ASCII码
功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出
显示器功能调用INT 10H
功能号:AH=0EH
入口参数:AL=字符的ASCII码
BL=字符的颜色值(图形方式) BH=页号(字符方式) 通常使BX=0 功能:将字符按原属性在光标处显示,光标自动移到下一个字符位置
字符输入的功能调用 键盘功能调用INT 16H
3.6 处理机控制与杂项操作指令:
标志处理指令 CLC、 STC、 CMC、 CLD、STD、 CLI、STI
注意: * 只影响本指令指定的标志 其他处理机控制与杂项操作指令 NOP、HLT、WAIT、ESC、LOCK