目录
引言
可以修改IP,或者同时修改CS和IP的指令统称为转移指令。概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。
8086CPU的转移行为分类:
(1)只修改IP时,称为段内转移,比如:jmp ax。
(2)同时修改CS和IP时,称为段间转移,比如:jmp 1000:0.
由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。
- 短转移IP的修改范围位-128~127。
- 近转移IP的修改范围为-32768~32767。
8086 CPU的转移指令分为以下几类:
- 无条件转移指令(如:jmp)
- 条件转移指令
- 循环指令(如:loop)
- 过程
- 中断
9.1 操作符offset
offset是伪指令,由编译器处理,它的功能是取得标号的偏移地址。
assume cs:codesg
codesg segment
start:mov ax,offset start ;相当于 mov ax,0
s:mov ax,offset s ;相当于 mov ax,3
codesg ends
end start
- mov ax,offset start相当于指令mov ax,0,因为start是代码段中的标号,它所标记的指令是代码段中的第一条指令,偏移地址为0;
- mov ax,offset s相当于指令mov ax,3,因为s是代码段中的标号,它所标记的指令是代码段中的第二条指令,第一条指令长度为3个字节,则s的偏移地址为3。
9.2 jmp指令
jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP。
jmp需要两种信息:
(1)转移的目的地址;
(2)转移的距离(段间转移、段内转移、段内近转移)。
9.3 依据位移进行转移的jmp指令
jmp short 标号(转到标号处执行指令)
实现段内短转移,对IP的修改范围是-128~127,即向前转移最多越过128个字节,向后转移最多越过127个字节。"short" 表明指令进行的是短转移,“标号”指明了指令要转移的目的地,转移指令结束后CS:IP应指向标号处的指令。
assume cs:codesg