8086汇编学习笔记8-转移指令

来源:互联网 发布:python game engine 编辑:程序博客网 时间:2024/06/09 21:42

修改IP,或同时修改CS和IP的指令称为转移指令

只修改IP时,称段内转移,段内转移又分为短转移和近转移,是根据IP修改范围不同而区分的,短转移修改IP范围为-128~127,近转移修改IP范围为-32768~

32767。

同时修改CS和IP时,称段间转移,也称远转移

1. jmp为无条件转移指令,可以修改IP,也可以同时修改CS和IP

(1) jmp short 标号,段内短转移,short说明指令进行的是短转移

(2) jmp near ptr 标号,段内近转移

注:前两个转移在机器指令中并不给出转移的目的地址,而是给出转移的相对位移,由编译器计算出。

(3) jmp far ptr 标号,段间转移,指令执行后,CS=标号所在段的段地址,IP=标号所在段的偏移地址

转移地址在寄存器中

(4)jmp 16位寄存器,指令执行后,IP=16位寄存器值

转移地址在内存中

(5) jmp word ptr 内存单元地址,为段内转移

(6) jmp dword ptr 内存单元地址,为段间转移,高地址字为转移目的段地址,低地址字为转移目的偏移地址

2. jcxz为有条件转移指令,所有有条件指令都为段内短转移,编译后在机器指令中只给出转移的偏移

jcxz 标号,如果cx=0,则跳到标号处执行

3. loop标号,为循环指令,所有循环指令都为段内短转移,编译后在机器指令中只给出转移的偏移

4. call和ret指令也是转移指令,主要用于子程序设计

ret,近转移,使用栈中的数据,修改IP值,相当于pop IP

retf,远转移,使用栈中数据,修改CS和IP值,相当于

pop IP

pop CS

call不能实现短转移,它将当前的IP或CS和IP压入栈中,再转移,转移原理同jmp相同。

(1) call 标号(16位位移),将当前IP压入栈中,转移到标号处执行,相当于

push IP

jmp near ptr 标号

(2) call far ptr 标号,段间转移,将CS和IP压入栈中,转移到标号处执行,相当于

push CS

push IP

jmp far ptr 标号

(3) call 16位寄存器,相当于

push IP

jmp 16位寄存器

(4) call word ptr 内存单元地址,相当于

push IP

jmp word ptr内存单元地址

(5) call dword ptr内存单元地址,相当于

push CS

push IP

jmp dword ptr 内存单元地址

原创粉丝点击