转移指令计算机原理.pdf
3.3.5 程序控制指令程序控制指令 程序控制指令又称为控制转移指令,包括转移指令、循环控制指令、过程调用指令和 中断指令 4 类。转移指令又分为无条件转移指令和条件转移指令。 1无条件转移指令无条件转移指令 JMP 计算机程序的执行完全按照 CSIP 的指向执行指令。通常情况下 CS 保持不变,IP 自动 增量,程序就按照指令的先后顺序执行。无条件转移指令会修改 CS 和 IP 的值,使程序跳 转到另一个位置去执行,改变指令的执行顺序。 根据程序的转移范围可分为段内转移和段间转移。 在同一段的范围之内进行转移, 只需 要修改 IP 的值, 称为段内转移。 如果 CS 的值被修改, 意味着程序将转移到另外的段去执行, 这称为段间转移。段间转移不仅修改段基址CS 的值,还修改 IP 的值。 JMP 指令不影响标志位。 (1)段内转移 指令格式 JMP OPRD 功能段内转移,IP IP位移量,或给 IP 赋值。 说明根据 OPRD 的类型又分为段内直接转移和段内间接转移。指令不影响标志位。 例如 JMP LABEL ;LABEL 为指令标号 JMP SHORT LABEL JMP NEAR LABEL JMP BX JMP WORD PTRBXDI JMP LABEL,程序转移到 LABEL 指明的指令处继续执行。指令中 LABEL 通常为标号, 例如【例题 3-17】程序段中的 FOUND 和 DONE。 JMP SHORT LABEL, 程序转移到 LABEL指明的指令处继续执行。 SHORT 为属性说明符, 说明转移范围,以当前 IP 为中心,转移范围-128127。 JMP NEAR LABEL,程序转移到 LABEL 指明的指令处继续执行。NEAR 为属性说明符, 说明转移范围,以当前 IP 为中心,转移范围-3276832767。 说明在编程时 NEAR 与 SHORT 通常省略,编译时由汇编程序自己计算。如果用了 NEAR 或 SHORT,在编译时有时会提示不正确的属性限制。所以 JMP LABEL 是最常见 的形式。 由于 LABEL 对应一条指令,是这条指令的符号地址,所以以上三种 JMP 形式又称为 段内直接转移。这些指令在编译时,汇编程序会计算出它的下一条指令到 LABEL 指明的指 令之间的位移量(相距多少字节) ,将这个位移量编译为 JMP 的操作数。指令执行时 IP 加 上这个位移量 (JMP 指令的功能) , IP 的值被修改, 使得下一条要执行的指令指向 LABEL。 JMP BX,将 BX 的值传送给 IP,程序转移到 CSIP 处继续执行。操作数可以是所有 16 位 通用寄存器。 JMP WORD PTRBXDI,从BXDI指明的内存区域连续取出两个字节传送给 IP,程序转 移到 CSIP 处继续执行。操作数可以采用各种寻址方式。 以上两种 JMP 形式又称为段内间接转移,编程时要注意操作数必须是 16 位。 【例题 3-17】 MOV DI, 0 JMP DONE FOUND DEC DI DONE MOV POINT, DI MOV AX,1234H JMP CX ;IP2000H,程序跳转到段内偏移地址为 2000H 处 (2)段间转移 指令格式 JMP OPRD 功能段间转移,IPOPRD 的段内偏移地址,CSOPRD 所在段的段基址。 说明根据 OPRD 的类型又分为段间直接转移和段间间接转移。指令不影响标志位。 例如 JMP FAR LABEL JMP DWORD PTR BXDI JMP FAR LABEL ,程序转移到 LABEL 指明的指令处继续执行,LABEL 为标号。FAR 是 相对于 NEAR 的属性说明符,FAR 说明标号 LABEL 在另外的代码段,与 JMP 指 令本身不在同一段。 这条指令执行的操作是 IPLABEL 的偏移地址, CSLABEL 所在段的段基址,程序转移到 CSIP 处继续执行。这种 JMP 形式又称为段间直接转 移。 JMP DWORD PTRBXDI, 从BXDI指明的内存区域连续取出 4 个字节, 前两个字节 (低 地址)传送给 IP,后两个字节送给 CS,程序转移到 CSIP 处继续执行。操作数属 于存储器操作数,可以采用各种存储器的寻址方式。这种 JMP 形式又称为段间间 接转移。 例如 JMP FAR NEXT JMP 80002000H JMP DWORD PTR DI 2条件转移指令条件转移指令 条件转移指令先测试条件, 若条件成立则执行转移操作; 若不成立则不转移并顺序执行 下一条指令。所有的条件转移指令转移范围-128127,属于段内短转移,都不影响状态标 志位。 指令格式 JCC OPRD 功能若条件成立则转移到 OPRD 处执行,IP IP位移量。 说明J 是 JUMP 的缩写,CC 表示转移的条件,OPRD 通常是标号。 表 3-1 条件转移指令 指令名称 汇编格式 转移条件 功能说明 进位转移 JC target CF1 有进位或借位 无进位转移 JNC target CF0 无进位或借位 等于或为零转移 JE/JZ target ZF1 相等或结果为 0 不等于或非零转移 JNE/JNZ target ZF0 不相等或结果不为 0 奇偶校验为偶转移 JP/JPE target PF1 有偶数个 1 奇偶校验为奇转移 JP/JPO target PE0 有奇数个 1 结果为负转移 JS target SF1 为负数 结果为正转移 JNS target SF0 为正数 溢出转移 JO target OF1 溢出 不溢出转移 JNO target OF0 不溢出 大于则转移 JA/JNBE target CF0 且ZF0 无符号数 大于或等于则转移 JAE/JNB target CF0 无符号数 小于则转移 JB/JNAE target CF1 无符号数 小于或等于则转移 JBE/JNA target CF1 或ZF1 无符号数 大于则转移 JG/JNLE target SFOF且ZF0 带符号数 大于或等于则转移 JGE/JNL target SFOF 带符号数 小于则转移 JL/JNGE target SFOF且ZF0 带符号数 小于或等于则转移 JLE/JNG target SFOF或ZF1 带符号数 CX内容为0转移 JCXZ target CX0 【例题 3-18】测试 AX 为奇数还是偶数,如是奇数则 BX 置成 0FFFFH;如是偶数 BX 置 成 0。 TEST AX, 01H ;测试 BX 中最低位的逻辑值 JZ EVEN ;ZF1,AX 为偶数转移至 EVEN 处执行 MOV BX, 0FFFFH ;AX 为奇数,设置奇数标志 JMP CON EVEN MOV BX,0 ;设置偶数标志 CON 【例题 3-19】 AX 与 BX 均为无符号数,测试 AX 与 BX 的大小 CMP AX, BX ;比较 AX 与 BX JZ EQUAL ;AXBX 则转移到 EQUAL 处 JA LAG ;AXBX,则转至 LAG 处 JMP CON ;AXBX,转移至 CON 处 EQUAL MOV CX, 0 ;置等于标志 LAG MOV CX, 0FFFFH ;置大于标志 CON