第5章分支与循环程序设计 ■5,1转移 ■5.2分支结构程序设计 ■5.3循环程序设计 5,4跳转表
第5章 分支与循环程序设计 ◼ 5.1 转移 ◼ 5.2 分支结构程序设计 ◼ 5.3 循环程序设计 ◼ 5.4 跳转表
5.1转移 转移指令分: 无条件转移指令 条件转移指令
5.1 转移 转移指令分: ◼ 无条件转移指令 ◼ 条件转移指令
5.1.1无条件转移指令 ■无条件转移指令JMP 作用相当于goto语句,但使用频繁 分为: n段内转移 段内短转移 段间转移
5.1.1 无条件转移指令 ◼ 无条件转移指令JMP 作用相当于goto语句 ,但使用频繁。 ◼ 分为: ◼ 段内转移 ◼ 段内短转移 ◼ 段间转移
1.段内转移 ■格式: JMP SRC ■功能:跳转到SRC指定的位置继续执行 SRC可以是: 程序标号 如:JMP Done 寄存器 如:JMP EAX 内存操作数如: JMP LEBX]
1.段内转移 ◼ 格式:JMP SRC ◼ 功能:跳转到SRC指定的位置继续执行 ◼ SRC可以是: ◼ 程序标号 如: JMP _Done ◼ 寄存器 如: JMP EAX ◼ 内存操作数 如: JMP [EBX]
2.段内短转移 格式: JMP SHORT SRC ■JMP指令仅占2字节 SRC必须是一个程序标号 ■同 JMP SRC相比,短转移跳转的范围较小
2.段内短转移 格式:JMP SHORT SRC ◼ JMP指令仅占2字节 ◼ SRC必须是一个程序标号 ◼ 同JMP SRC相比,短转移跳转的范围较小
3.段间转移 在保护模式下,段间转移指令用来 切换任务 ■跳转到调用门指定的程序入口 执行另一个代码段内的程序 例如:JMP0060:005B5E20
3.段间转移 在保护模式下,段间转移指令用来 ◼ 切换任务 ◼ 跳转到调用门指定的程序入口 ◼ 执行另一个代码段内的程序 例如:JMP 0060:005B5E20
5.1.2条件转移指令 格式: JCC LABELX 功能:如果条件CC为真,则转移到 LABELX 处执行,否则顺序执行下一条指令。 ■ LABELX是程序中的一个标号; CC是条件标志位,指定了转移的条件
5.1.2 条件转移指令 格式:JCC LABELX 功能:如果条件CC为真,则转移到LABELX 处执行,否则顺序执行下一条指令。 ◼ LABELX是程序中的一个标号; ◼ CC是条件标志位 ,指定了转移的条件
条件转移指令分类 1.依据单个标志位的条件转移指令 2.依据有符号数比较结果的条件转移指令 3.依据无符号数比较结果的条件转移指令 4.依据 CX/ECX是否为0的条件转移指令
条件转移指令分类 1.依据单个标志位的条件转移指令 2.依据有符号数比较结果的条件转移指令 3.依据无符号数比较结果的条件转移指令 4.依据CX/ECX是否为0的条件转移指令
依据单个标志位的条件转移指令 指令 等价形式 跳转条件 说明 JZ JE 7F=1 上一指令计算结果等于0,或者比较的两个数相等, JNZ JNE ZF=O, 上一指令计算结果不等于0,或者比较的两个数不等, JC JB CF=1, 比较两个无符号数时,第1个数低于第2个数 JNC JNB CF=0, 比较两个无符号数时,第1个数高于或等于第2个数 JS 上一指令计算结果为负数 JNS SF=0, 上一指令计算结果为正数或0 JO 上一指令计算结果溢出 JNO OF=0,上一指令计算结果没有溢出 JP JPE PF=1, E代表Ben,上一指令计算结果中1的个数为偶数 JNP JPO P0,0代表OAM,上一指令计算结果中1的个数为奇数
1.依据单个标志位的条件转移指令
例如,求DIST=A-B MOV EAX A SUB EAX, B JNS A10 NEG EAX A10: DIST. EAX JNS比较SF的值,如果EAX是正数或0,就跳转到A10,否 则执行下一句
例如,求DIST=|A–B|。 MOV EAX, A SUB EAX, B JNS A10 NEG EAX A10: MOV DIST, EAX JNS比较SF的值,如果EAX是正数或0,就跳转到A10,否 则执行下一句