微机原理 第5章5.2.5控制转移类指令与处理器控制指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章
Jcc指令的分类
Jcc 指令 不 影 响 标 志 , 但 要 利 用 标 志
(表5.31)。根据利用的标志位不同, 18条指令分成3种情况:
1. 判断单个标志位状态 2. 比较无符号数高低 3. 比较有符号数大小
第5章
判断单个标志位状态
这组指令单独判断5个状态标志之一
⑴JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否 补充例题1 为零(或相等) ⑵JS和JNS:利用符号标志SF,判断结果是正是负 ⑶ JO 和 JNO :利用溢出标志OF,判断结果是否产生 补充例题3 溢出 ⑷ JP/JPE 和 JNP/JPO :利用奇偶标志PF,判断结果 补充例题4 中“1”的个数是偶是奇 ⑸ JC 和 JNC :利用进位标志CF,判断结果是否进位 补充例题5 或借位
;IP=1200H ;IP=2000H
第5章
段间直接转移
JMP far ptr label
;IP←label的偏移地址 ;CS←label的段地址
将标号所在段的段地址作为新的CS值,
标号在该段内的偏移地址作为新的IP值;这 样,程序跳转到新的代码段执行
第5章
段间间接转移
JMP far ptr mem
例5.49:比较无符号数
【例5.49】比较无符号数AX、BX和CX的大小,将最
小数存于AX中。 CMP BX,CX JB NEXT1 XCHG BX,CX NEXT1: CMP JAE NEXT2 RET NEXT2: XCHG RET
;若BX<CX,则继续比较AX和BX AX,BX ;若AX≥BX,则放小数到AX AX, BX
代 码 段
代 码 段
第5章
目标地址的范围:段间
段间转移——远转移(far ptr) 从当前代码段跳转到另一个代码 段,可以在1MB范围 更改CS段地址和IP偏移地址 目标地址必须用一个32位数表达, 叫做32位远指针,它就是逻辑地 址
代 码 段
代 码 段
第5章
段内直接转移
;IP←label
S1 S2 …… CLD LEA LEA MOV NEXT: ADD STOSB LOOP RET
DB 0,1,2,3,4 DB 1,1,1,1,1
SI,S1 DI,ES:S2 CX,5 LODSB AL,ES:[DI] NEXT
;设置循环次数,位于循环体外部 ;将S1的数据存入AL ;将S1与S2对应相加,结果在AL中 ;将AL数据存入ES:[DI] dec cx ;循环执行,直到CX-1=0
CALL指令需要保存返回地址: 段内调用——入栈偏移地址IP SP←SP-2,SS:[SP]←IP
段间调用——入栈段地址CS和偏移地址IP SP←SP-2,SS:[SP]←CS SP←SP-2,SS:[SP]←IP
wenku.baidu.com
第5章
2、子程序返回指令RET
说明 子程序调用返回。最常用的一种返回指令。 若为段内调用,则原IP出栈恢复;若 为段间调用,则原IP、CS依次出栈恢 复。 有参数返回。若为段内调用,则原IP先出 栈恢复,再将堆栈中SP+i16;若为段 间调用,则原IP、CS依次出栈恢复, 再将堆栈中SP+i16。
第5章
6.3.3 ROM-BIOS功能调用
一个字符的输出,功能调用INT 10H 功能号:AH=0EH 入口参数:AL=字符的ASCII码 BL=字符的颜色值(图形方式) BH=页号(字符方式) 通常使BX=0 功能:将字符按原属性在光标处显示, 光标自动移到下一个字符位置
JMP label
小方向转移时,位移量为负 again: dec cx …… jmp again …… jmp output …… output: mov result,al
当向地址增大方向转移时,位移量为正;向地址减
;标号again的指令
;转移到again处继续执行 ;转向output ;标号output的指令
指令格式
RET
RET i16
补充例题:子程序调用与返回
例:利用子程序完成将AL中的低4位中的一位16进 制数转换成相应的ARSII码。
;主程序 mov al,0Ah ;提供参数AL call htoasc ;调用子程序 ... ;子程序:将AL低4位的一位16进制数转换成ASCII码 htoasc: and al,0fh ;只取al的低4位 or al,30h ;al高4位变成3 cmp al,39h ;是0~9,还是0Ah~0Fh jbe htoend add al,7 ;是0Ah~0Fh,加上7 AL=41 htoend: ret ;子程序返回
第5章
中断指令INT
INT i8
;中断调用指令:产生i8号中断
IRET
;中断返回指令:实现中断返回
INTO
;溢出中断指令: ;若溢出标志OF=1,产生4号中断 ;否则顺序执行
第5章
6.3 系统功能调用
21H号中断是DOS提供给用户的用于调
用系统功能的中断,它有近百个功能供用 户选择使用,主要包括设备管理、目录管 理和文件管理三个方面的功能 ROM-BIOS也以中断服务程序的形式, 向程序员提供系统的基本输入输出程序 汇编语言程序设计需要采用系统的各种 功能程序 充分利用操作系统提供的资源是程序设 计的一个重要方面,需要掌握
第5章
五、中断指令
中断(Interrupt )是又一种改变程序
执行顺序的方法 中断具有多种中断类型 中断的指令有3条:
INT i8 IRET INTO
本节主要掌握类似子程序调用指令的中
断调用指令INT i8,进而学习使用DOS 功能调用
第5章
8086的外部中断
8086可以管理256个中断 各种中断用一个向量编号来区别
第5章
比较有符号数大小
有符号数的大用(Greater),小用(Less)
表示。 两数的大小分成4种关系: ⑴ 小于(不大于等于):JL(JNGE) ⑵ 大于等于(不小于): JGE ( JNL ) ⑶ 小于等于(不大于):JLE(JNG) ⑷ 大于(不小于等于): JG ( JNLE )
例:比较有符号数
;CX≠0且ZF=1,循环到标号label
LOOPNZ/LOOPNE label
;CX←CX-1, ;CX≠0且ZF=0,循环到标号label
JCXZ label ;CX=0,转移到标号label
循环指令默认利用CX计数器
label操作数采用直接短转移寻址方式
例5.50
【例5.50】将S1和S2中每个数据依次相加,结果保存在S2中。
;IP←[mem],CS←[mem+2] 用一个双字存储单元表示要跳转的目标地 址。这个目标地址存放在主存中连续的两个 字单元中的,低位字送IP寄存器,高位字送 CS寄存器
mov word ptr [bx],0 mov word ptr [bx+2],1500h JMP far ptr [bx] ;转移到1500h:0
next:
cmp ax,bx ;比较ax和bx jnl next ;若ax≥bx,转移 xchg ax,bx ;若ax<bx,交换 ... 结果:AX保存较大的有符号数
第5章
三、循环指令(loop) LOOP label ;CX←CX-1,
;CX≠0,循环到标号label
LOOPZ/LOOPE label ;CX←CX-1,
jnz next
第5章
四、子程序指令
子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,
采用CALL调用指令转移到该子程序的起始 处执行 当运行完子程序功能后,采用RET返回指令 回到主程序继续执行
演示
第5章
CALL 指令格式
说明
段内调用子程序LABEL。原IP指针进栈保 护。最常见的一种CALL指令格式。 段内调用,跳转到r16/m16中的数据所对 应的地址处执行。原IP指针进栈保护。
第5章
二、条件转移指令
Jcc label
;cc为跳转条件:满足,转移IP←label ;不满足,顺序执行
指定的条件cc如果成立,程序转移到由标号label
指定的目标地址去执行指令;条件不成立,则程 序将顺序执行下一条指令 操作数label是采用直接寻址方式的短转移标号 表示Jcc指令跳转到的那条指令的偏移地址 距当前IP地址-128~+127个单元的范围之内
第5章
一、无条件转移指令
JMP 目标地址;
只要执行无条件转移指令JMP,就使程序转到指
定的目标地址处,从目标地址处开始执行指令 根据目标地址(目的地址、转移地址)的表达形 式以及跳转的距离 JMP指令分成5种类型: ⑴ 段内直接短转移 ⑵ 段内直接近转移 例:JMP LABLE ⑶ 段内间接转移 ⑷ 段间直接转移 ⑸ 段间间接转移
指令格式
CALL LABEL
CALL
r16/m16
CALL FAR PTR LABEL
段间调用子程序。子程序与主程序在不同 的段,故调用时原CS、IP依次进栈保护。
段间调用,调用时原CS、IP依次进栈保护。 子程序位置IP=[mem],CS=[mem+2]。
CALL
FAR PTR
mem
第5章
子程序调用指令
补充例题2
第5章
比较无符号数高低
无符号数的大小用高(Above)低(Below)
表示 两数的高低分成4种关系: ⑴ 低于(不高于等于):JB(JNAE) ⑵ 高于等于(不低于): JAE ( JNB ) ⑶ 低于等于(不高于):JBE(JNA) ⑷ 高于(不低于等于): JA ( JNBE )
主要分成外部中断和内部中断
外部中断——来自CPU之外的原因引起的中
断,又可以分成
可屏蔽中断:可由CPU的中断允许标志IF控制 不可屏蔽中断:不受CPU的中断允许标志IF控 制
第5章
8086的内部中断
内部中断——CPU内部执行程序引起的中
断,又可以分成:
除法错中断:执行除法指令,结果溢出产生的 0 号中断 单步中断:TF=1在每条指令执行后产生的 1 号中断 断点中断:用于断点调试(INT 3)的 3 号中断 溢出中断:执行溢出中断指令,OF=1产生的 4 号中断 指令中断:执行中断调用指令INT i8产生的 i8 号中断
⒉ 字符串的输出
从键盘输入数据
⒊ 字符的输入 ⒋ 字符串的输入 ⒌ 按键的判断
汇编语言程序
裸机
第5章
一、字符的输出
DOS功能调用INT 21H 功能号:AH=02H 入口参数:DL=字符的ASCII码 功能:在显示器当前光标位置显示 给定的字符,光标右移一个字符位 置。如按Ctrl-Break或Ctrl-C则退出
第5章
目标地址的表达形式
直接寻址方式 用标号表达 转移地址象立即数一样,直接在指令 的机器代码中
用寄存器或存储器 操作数表达
间接寻址方式 转移地址在寄存器或主存单元中 例JMP AX
第5章
目标地址的范围:段内
段内转移——近转移(默认) 跳转的距离在-32768~+32767之间。 不需要更改CS段地址,只要改变IP偏 移地址 当向地址增大方向转移时,位移量为 正;向地址减小方向转移时,位移量 为负 段内转移——短转移(short ptr) 目标地址与JMP指令的下一条地址之间 的差值为-128~+127
第5章
功能调用的步骤
通常按照如下4个步骤进行:
⑴ 在AH寄存器中设置系统功能调用号 ⑵ 在指定寄存器中设置入口参数 ⑶ 执行指令INT 21H(或ROM-BIOS的中断向 量号)实现中断服务程序的功能调用 ⑷ 根据出口参数分析功能调用执行情况
第5章
输入输出类功能调用
向显示器输出字符
⒈ 字符的输出
第5章
段内间接转移
JMP r16/m16
;IP←r16/m16
将一个16位寄存器或主存字单元内容送入IP
寄存器,作为新的指令指针,但不修改CS寄存 器的内容。
【例5.47】设DS:[1200H]=00H,DS:[1201H]=20H
MOV AX, 1200H JMP AX JMP WORD PTR [1200H]
第5章
5.2.5 控制转移类指令
控制转移类指令用于实现分支、循环、过程
等程序结构,是仅次于传送指令的常用指令
重点掌握:JMP/Jcc/LOOP CALL/RET INT n/IRET 常用系统功能调用 一般了解: LOOPZ/LOOPNZ INTO
控制转移类指令通过改变IP(和CS) 值,实现程序执行顺序的改变