image.png
    一、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 内存单元地址(段内转移)
    功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址。内存单元地址可以用寻址方式的任意格式给出
    例如:
    image.png

    2、jmp dword ptr 内存单元地址(段间转移)
    功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的 目的段地址,低地址处是转移的 目的偏移地址。内存单元地址可以用寻址方式的任意格式给出
    (CS)=(内存单元地址 + 2)
    (IP)=(内存单元地址)
    例如:
    image.png

    七、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时,什么也不做,(程序向下执行)