CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
可以修改IP,或同时修改CS和IP的指令统称为转移指令。
8086cpu的转移指令分为以下几类:
- 无条件转移指令(如:jmp)
- 条件转移指令
- 循环指令
- 过程
- 中断
一、offset
操作符offset在汇编语言中是编译器处理的符号,功能是取得标号的偏移地址。
assume cs:codesg
codesg segment
start:mov ax,offset start ;相当于mov ax,0
s:mov ax,offset s ;相当于mov ax,3,前面一条指令的长度为3个字节
codesg ends
end start
二、jmp(无条件转移指令)
jmp可以只修改IP,也可以同时修改CS和IP。
修改IP,段内转移
jmp short 标号
;(IP)=(IP)+8位位移
jmp near ptr 标号
;(IP)=(IP)+16位位移
CPU在执行jmp指令时并不需要转移的目的地址,而是地址偏移。
段间转移
jmp far ptr 标号
;(CS)=标号所在段的段地址;(IP)=标号所在段的偏移地址
转移地址在寄存器
jmp 16位reg
;(IP)=(16位reg)
转移地址在内存中
jmp word ptr 内存单元地址 ;段内转移
jmp dword ptr 内存单元地址 ;段间转移
(CS)=(内存单元地址+2)
(IP)=(内存单元地址)
三、jcxz(有条件转移指令)
jcxz 标号 ;如果(CX)=0,转移到标号处执行,所有有条件转移都是短转移,对IP的修改范围为-128~127
四、loop
loop 标号 ;(CX)=(CX)-1,如果(CX)!=0,转移到标号处执行,短转移,对IP修改范围为-128~127