一、8086 CPU的转移指令分为以下几类:
1、无条件转移指令(如:jmp)
2、条件转移指令
3、循环指令(如:loop)
4、过程
5、中断
二、jmp 指令:
1、操作符 offset 在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址
2、jmp为无条件转移,可以修改IP,也可以同时修改CS和IP
3、jmp指令要给出两种信息:
①、转移的目的地址
②、转移的距离(段间转移,段内短转移,段内近转移)
三、依据位移进行转移的jmp指令:
1、jmp short 标号:(转到标号处执行指令)
说明:这种格式的 jmp 指令实现的是段内短转移,他对IP的修改范围为-128~127, 也就是说,他向前转移可以最多穿越128个字节,向后转移可以最多穿越127个字节
功能:jmp short 标号的功能是(IP) = (IP) + 8
①、8位位移 = “标号”处的地址-jmp指令后的第一个字节的地址
②、short 指明此处的位移为8位位移
③、8位位移的范围-128~127,用补码表示
④、8位位移由编译器在编译时算出
注:还有一种和指令”jmp shorrt 标号”功能相近的指令格式:
jmp near ptr 标号:它实现的是段内近转移
功能:(IP) = (IP) + 16位位移
①、16位位移 = “标号”处的地址-jmp 指令后的第一个字节的地址
②、near ptr 指明此处的位移为16位位移,进行的是段内近转移
③、16位位移的范围-32769~32767,用补码表示
④、16位位移由编译器在编译时算出
四、转移的目的地址在指令中的jmp指令:
1、指令”jmp far ptr 标号”:实现的是段间转移(远转移)
功能:
①、(CS)=标号所在段的段地址
②、(IP)=标号所在断中的偏移地址
③、far ptr 指明了指令用标号的段地址和偏移地址修改CS和IP
五、转移地址在寄存器中的jmp指令:
1、指令格式:jmp 16位寄存器
功能:IP = 16位寄存器
六、转移地址在内存中的 jmp 指令:
转移地址在内存中的jmp指令有两种格式:
1、jmp word ptr 内存单元地址(段内转移)
功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址。内存单元地址可以用寻址方式的任意格式给出
例如:
2、jmp dword ptr 内存单元地址(段间转移)
功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的 目的段地址,低地址处是转移的 目的偏移地址。内存单元地址可以用寻址方式的任意格式给出
(CS)=(内存单元地址 + 2)
(IP)=(内存单元地址)
例如:
七、jcxz指令:
说明:jcxz指令是有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址,对于IP修改范围位-128~127
1、指令格式:jcxz 标号
(如果(cx)=0,则转移到标号处执行)
功能:
当(cx)=0时,(IP)=(IP) + 8位位移
①、8位位移=”标号”处的地址 -jcxz 指令后的第一个字节的地址
②、8位位移的范围-128~127,用补码表示
③、8位位移由编译器在编译时算出
当(cx)=0时,什么也不做,(程序向下执行)
八、loop指令:
说明:loop指令是循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址,对于IP修改范围位-128~127
1、指令格式:loop 标号
(cx)=(cx) - 1,如果(cx) ≠ 0,转移到标号处执行
功能:
(cx)=(cx) - 1
当(cx)≠0时,(IP)=(IP) + 8位位移
①、8位位移=”标号”处的地址 -loop指令后的第一个字节的地址
②、8位位移的范围-128~127,用补码表示
③、8位位移由编译器在编译时算出
当(cx)=0时,什么也不做,(程序向下执行)