第九章 转移指令的原理
offset
start : mov ax, offset start
jmp
mov jmp short s ; 机器码 `EB 03`,03表示向后跳转3个字节大小
mov ax, 12 ; 机器码 3位
s: mov ax, ax
cpu不需要目的地址实现对IP的修改
由上可知:
-
jmp far ptr 标号
段间转移(远转移)
-
jmp在内存中的转移
-
jmp word ptr 内存单元地址
jmp word ptr ds:[0]
-
jmp dword ptr 内存单元地址
-
jcxz指令
指令jcxz 标号相当于:
((cx) == 0) ? jmp short 标号: continue;
loop指令
所有循环指令都为短转移,所对应的机器码为偏移地址,不是目的地址,对ip修改范围-128 ~ +127
while ((cx) != 0)
{
(cx) = (cx) - 1;
ip = ip + 8位指令;
}
根据位移距离转移的目的
为方便程序段在内存中的浮动装配,因为偏移距离可以使程序在任意内存单元都可执行,而固定地址会导致内存限制