第3章-指令系统-6
* 控制转移指令: ? 无条件转移指令 JMP ? 条件转移指令 JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、 JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、 JLE / JNLE、 JCXZ ? 循环指令 LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE ? 子程序调用和返回指令 CALL、RET ? 中断与中断返回指令 INT、INTO、IRET 几组概念: ? 段内及段间转移 ①段间转移及段间调用:同时改变CS、IP的值。用FAR表示 ②段内转移及段内调用:仅改变IP的值。用NEAR表示 ③段内短转移(无短调用):仅改变IP的值。用SHORT表示(转移范围:-128~+127) 直接或间接转移 ①直接转移:就是转移的目标地址信息直接出现在指令的机器码中。如:JMP SHORT/NEAR PTR/FAR PTR OPR ②间接转移:就是转移的目标地址信息间接存储于某一个寄存器或某一存储单元中。如:JMP BX JMP WORD PTR OPR 相对转移或绝对转移 ①相对转移:以当前指令为中心往前或往后转移,称为相对转移。所有段内直接转移都是相对转移。 ②绝对转移:以全新的地址指针完全取代当前的IP(CS)的值,称为绝对转移。所有段内间接转移和段间转移都是绝对转移。 无条件转移指令: 段内直接短转移:JMP SHORT OPR 执行操作:(IP) ← (IP) + 8位位移量 是相对转移。只允许在-128~+127字节的范围内转移。 JMP指令 旧(IP)? MOV指令 : B0 03 EB 08 低地址 0100H 0101H 0102H : 010AH 010BH 高地址 : JMP SHORT H1 : H1:MOV AL,3 : 新IP(010AH)=旧IP(0102H)+位移量(08H) 是一种相对转移 举例: 举例: 转向的有效地址 = 当前(IP) + 位移量(8bit) 段内直接近转移:JMP NEAR PTR OPR 执行操作:(IP) ← (IP) + 16位位移量 是相对转移 段内间接转移: JMP WORD PTR OPR 执行操作: (IP) ← (EA) 或: JMP BX 执行操作: (IP) ← (BX) 是绝对转移 段间直接远转移:JMP FAR PTR OPR 执行操作:(IP) ← OPR 的段内偏移地址 (CS) ← OPR 所在段的段地址 是绝对转移 段间间接转移: JMP DWORD PTR OPR 执行操作: (IP) ← (EA) (CS) ← (EA+2) 是绝对转移 code1 segment …… jmp far ptr next …… code1 ends code2 segment …… next: …... …… code2 ends 段间直接远转移 用指令中提供的转向段地址和偏移地址取代CS 和 IP 例: 段间间接转移 用存储器中的两个相继字的内容取代CS 和 IP (存储单元的地址可用存储器寻址方式得到) 例: JMP DWORD PTR [INTERS+BX] PA=(DS)×24 + (BX) + INTERS (PA+1, PA) → IP (PA+3, PA+2) → CS 条件转移指令: 注意:只能使用段内直接寻址的8 位位移量 (1) 根据单个条件标志的设置情况转移(10条) 格式 测试条件 JZ(JE) OPR ZF = 1 JNZ(JNE) OPR ZF = 0 JS
原创力文档

文档评论(0)