专接本汇编6(JMP,条件转移指令,LOOP指令)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
21
实例
1. 给两个无符号数,求最大值和最小值。 给两个无符号数,求最大值和最小值。 2. 把大写字母转换为小写字母 3. 求出 求出1-10之间的偶数 之间的偶数 4. 在BUF为首地址的内在单元中 存放若干个 位的有符号 为首地址的内在单元中,存放若干个 为首地址的内在单元中 存放若干个8位的有符号 统计数组中大于0的数的个数 并将结果存入RESUlT 数,统计数组中大于 的数的个数 并将结果存入 统计数组中大于 的数的个数,并将结果存入 字节单元中. 字节单元中
11
条件转移指令
判断两个数大小的条件转移指令
测试单个标志的条件转移指令
12
判断两个数大小的条件转移指令
对于判断无符号数大小的条件转移指令,用 对于判断无符号数大小的条件转移指令, 无符号数大小的条件转移指令 高于” 低于”表示两个数的关系。 “高于”和“低于”表示两个数的关系。 对于判断带符号数大小的条件转移指令,用 对于判断带符号数大小的条件转移指令, 带符号数大小的条件转移指令 大于” 小于”表示两个数的关系。 “大于”和“小于”表示两个数的关系。
说明: 说明:
转移和段间转移。 段内转移和段间转移。 ① 直接转移 直接给出目标地址。 直接给出目标地址。 ② 间接转移 目标地址存放在寄存器或内存单元中, 目标地址存放在寄存器或内存单元中,当 通过寄存器间接转移时, 通过寄存器间接转移时,只能完成段内间接转 移
3
实例
MOV AX,0 JMP NEXT MOV BX,0 MOV CX,0 NEXT: MOV AH,4CH INT 21H MOV AX,0 NEXT: MOV BX,0 MOV CX,0 JMP NEXT MOV AH,4CH INT 21H
19
测试单个标志的条件转移指令
2. 测试 --进位标志 测试CF--进位标志 -- JC/JNC指令 指令 1) JC 2) JNC 当满足CF=1时,转移到目标地址。 时 转移到目标地址。 当满足 当满足CF=0时,转移到目标地址。 时 转移到目标地址。 当满足
3. 测试SF--符号标志 测试SF-- --符号标志 JS/JNS指令 指令 1) JS 当满足SF=1时,转移到目标地址。 时 转移到目标地址。 当满足 2) JNS 当满足 当满足SF=0时,转移到目标地址。 时 转移到目标地址。
实例 JMP NEXT AND AL,7FH NEXT : XOR AL,7FH
6
段内直接短 段内直接短转移
无条件转移指令的格式: 无条件转移指令的格式: JMP SHORT-LABEl ; (IP)+DISP(8位) IP 位 SHORT-LABEl是一个短标号 相对位移量 是一个短标号,相对位移量 是一个短标号 相对位移量DISP的范围是 的范围是 之间.该标号在本段内使用 在-128-+127之间 该标号在本段内使用 之间 该标号在本段内使用. 实例 JMP SHORT NEXT AND AL,7FH NEXT : XOR AL,7FH
14
判断无符号数大小的条件转移指令
JAE/JNB JAE指令 指令 JNB指令 指令 JNAE/JB JNAE指令 (不高于等于转移) 指令 不高于等于转移 转移) JB指令 指令 (低于转移) 低于转移) 转移 等于转移 (高于/等于转移) 高于 等于转移) (不低于转移) 不低于转移) 转移
15
控制类指令
程序转移指令 处理机控制指令
1
实例
CODE SEGMENT …… MOV AX,1 MOV BX,2 ADD BX,AX JMP LOOP ADD BX,4 ADD BX,5 …… LOOP1: …… CODE ENDS
2
程序中每条指令的寻址是由CS 程序中每条指令的寻址是由 决定的。 和IP决定的。 决定的 让程序转移到另一个位置需要 修改IP(段内转移 修改 (段内转移/NEAR)或 ) CS:IP(段间转移 段间转移/FAR) 段间转移 如段内转移( 如段内转移(-128-+127)则称 ) 为短转移, 来表示。 为短转移,用SHORT来表示。 来表示
标号是一个远标号,该标号在另一个代码段内 标号是一个远标号 该标号在另一个代码段内
9
段间间接转移
无条件转移指令的格式: 无条件转移指令的格式: JMP MEM32 ; (MEM32) IP ; (MEM32+2) CS
注意: 注意 段间的间接转移指令的操作数不能是寄存器
10
条件转移指令概述
标号 所有条件转移指令的目标操作数都是短标号。即 所有条件转移指令的目标操作数都是短标号。 短标号 转向的目标地址距转移指令的下一条指令的第一 个字节的相对位移量必须在- 到 个字节的相对位移量必须在-128到+127(一 ( 个字节所能表示的)范围之内。若条件满足, 个字节所能表示的)范围之内。若条件满足,则 将这个相对位移量加到指令指针寄存器IP上以实 将这个相对位移量加到指令指针寄存器 上以实 现其转移。 现其转移。 所有条件转移指令对状态标志均无影响。 所有条件转移指令对状态标志均无影响。
Leabharlann Baidu
22
循环控制指令
1. LOOP
2. LOOPZ(LOOPE) ( ) 3. LOOPNZ(LOOPNE) ( )
23
LOOP 循环控制指令
格式:LOOP 标号(标号是短标号,范围(-128-127)) 格式: 标号(标号是短标号,范围 ) 标号时,进行两步操作: 执行操作 : CPU执行 LOOP 标号时,进行两步操作: 执行 1)( )- CX )(CX)- )( )-1 2) 判断 中的值,不为 则继续执行循环体,若 ) 判断CX中的值 不为0则继续执行循环体 中的值, 则继续执行循环体, 为0,则退出循环体顺序往下执行。 ,则退出循环体顺序往下执行。 注意: 注意: 1. 要执行 要执行LOOP循环指令,则必须把循环次数预先送入 循环指令, 循环指令 CX中,LOOP为循环体的最后一个语句。 中 为循环体的最后一个语句。 为循环体的最后一个语句
7
段内间接转移
无条件转移指令的格式: 无条件转移指令的格式: JMP REG16/MEM16 ; (IP)+DISP(16位) IP 位
实例 JMP SI JMP [BX] JMP WORD PTR [BP][DI]
8
段间直接转移
无条件转移指令的格式: 无条件转移指令的格式: JMP FAR-LABEl ; OFFSET IP
25
LOOPNZ(LOOPNE)循环控制指令 ( )
格式: 标号(标号是短标号,范围(-128-127)) 格式:LOOPNZ 标号(标号是短标号,范围 ) 执行LOOPNZ 标号时,进行两步操作: 标号时,进行两步操作: 执行操作 :CPU执行 执行 1) (CX)- CX )-1 )- 2) 判断CX中的值, 判断 中的值, 中的值 (CX!=0且ZF=0(结果不为 ,则继续执行循环体 且 结果不为0)),则继续执行循环体; 结果不为 (CX==0||CX!=0且ZF=1(结果为 则退出循环体, 且 结果为0))则退出循环体 结果为 则退出循环体, 顺序往下执行。 顺序往下执行。
18
测试单个标志的条件转移指令
1. 测试 --零标志 测试ZF--零标志 -- 1) JE/JZ指令 指令 时转移) JE (相等 时转移) JZ (结果等于 时转移 结果等于0时转移 结果等于 时转移)
2) JNE/JNZ指令 指令 JNE (不相等 时转移) 时转移) JNZ (结果不等于 时转移 结果不等于 时转移) 结果不等于0时转移
17
判断有符号数大小的条件转移指令
JL/JNGE JL指令 指令 (小于转移) 小于转移) 转移
JNGE指令(不大于等于转移) 指令(不大于等于转移) 指令 转移 JLE/JNG JLE指令(小于等于转移) 指令(小于等于转移) 指令 转移 JNG指令(不大于转移) 指令(不大于转移) 指令 转移
5
段内直接转移
无条件转移指令的格式: 无条件转移指令的格式: JMP NEAR-LABEl; (IP)+DISP(16位) IP 位 NEAR-LABEl是一个近标号 相对位移量 是一个近标号,相对位移量 是一个近标号 相对位移量DISP范 范 之间.该标号在本段内使用 围在 -32768-+32767之间 该标号在本段内使用 之间 该标号在本段内使用.
16
判断有符号数大小的条件转移指令
JG/JNLE JG指令 指令 (大于转移) 大于转移) 转移
JNLE指令(不小于等于转移) 指令(不小于等于转移) 指令 转移 JGE/JNL JGE指令(大于等于转移) 指令(大于等于转移) 指令 转移 JNL指令(不小于转移) 指令(不小于转移) 指令 转移
说明: 说明: 目标地址的计算以当前 IP的值为中心,前移或者 的值为中心, 的值为中心 后移,称为相对转移 相对转移。 后移,称为相对转移。 以新的值完全代替当前 绝对转移。 的IP值,称为绝对转移。 值 称为绝对转移 系列中, 在86系列中,所有的段 系列中 所有的段 内直接转移都是相对转移, 内直接转移都是相对转移, 所有的段内间接转移 段内间接转移和 所有的段内间接转移和段 间间接转移都是绝对转移。 间间接转移都是绝对转移。
24
LOOPZ(LOOPE)循环控制指令 ( )
格式: 标号(标号是短标号,范围(-128-127)) 格式:LOOPZ 标号(标号是短标号,范围 ) 进行两步操作: 执行操作 :CPU执行 LOOPZ 标号 时,进行两步操作: 执行 1) (CX)- CX )-1 )- 2) 判断CX中的值, 判断 中的值, 中的值 (CX!=0且ZF=1(结果为 ,则继续执行循环体 且 结果为0)),则继续执行循环体; 结果为 (CX==0||CX!=0且ZF=0(结果不为 则退出循环体, 且 结果不为0))则退出循环体 结果不为 则退出循环体, 顺序往下执行。 顺序往下执行。
4
JMP 无条件转移指令
无条件转移指令的格式: JMP 标号 无条件转移指令的格式: 无条件转移指令跳转到指定的位置去执行程序, 无条件转移指令跳转到指定的位置去执行程序, 因此指令中必须给出转移位置的地址, 因此指令中必须给出转移位置的地址,即给出 标号。 标号。 分类 段内直接转移, 段内直接转移 段内间接转移 段间直接转移, 段间直接转移 段间间接转移
13
判断无符号数大小的条件转移指令
JA/JNBE JA指令 指令 (高于转移) 高于转移) 转移
JNBE指令(不低于等于转移) 指令(不低于等于转移) 指令 转移 JNA/JBE JNA指令(不高于转移) 指令(不高于转移) 指令 转移 等于转移 JBE指令(低于/等于转移) 指令(低于 等于转移) 指令
20
测试单个标志的条件转移指令
4. 测试 --奇偶标志 测试PF-- --奇偶标志 1) JP/JPE(为偶数 为偶数) 为偶数 当满足PF=1时,转移到目标地址。 当满足 时 转移到目标地址。 2) JNP/JPO(为奇数) (为奇数) 当满足PF=0时,转移到目标地址。 当满足 时 转移到目标地址。 5. 测试 --溢出标志 测试OF-- --溢出标志 1) JO (溢出转移 溢出转移) 溢出转移 当满足OF=1时,转移到目标地址。 当满足 时 转移到目标地址。 2) JNO(末溢出转移) (末溢出转移) 当满足OF=0时,转移到目标地址。 当满足 时 转移到目标地址。
实例
1. 在BUF为首地址的内在单元中 存放两个数据 为首地址的内在单元中,存放两个数据 为首地址的内在单元中 34,78,求出最大值 存放在 求出最大值,存放在 的内存单元中. 求出最大值 存放在RESUlE的内存单元中 的内存单元中 2. 在BUF为首地址的内在单元中 存放三个数据 为首地址的内在单元中,存放三个数据 为首地址的内在单元中 存放三个数据34,78, 11,求出最大值,存放在 11,求出最大值,存放在RESUlE的内存单元中. 的内存单元中. 求出最大值 存放在RESUlE的内存单元中 3. 在BUF为首地址的内在单元中 存放五个数据34,78 为首地址的内在单元中,存放五个数据 为首地址的内在单元中 存放五个数据 ,11,98,2求出最大值 存放在 求出最大值,存放在 的内存单元中. 求出最大值 存放在RESUlE的内存单元中 的内存单元中