assume cs:code
code segment
start:
mov ax,0000H
jmp short finish
; 该指令( inc ax )占用一个字节 , 接下来就是 finish 标号
; 因此 jmp 的操作的操作数为 inc ax 指令的长度 : 也就是 1
inc ax
finish:
mov ax,4cH
int 21H
code ends
end start
assume cs:code
code segment
start:
mov ax,0000H
jmp short finish
; jmp 采用偏移的方式来进行跳转 , 这里存在两个 inc ax
; 也就是 两个 字节 , 因此 jmp 指令的操作数就是 2
inc ax
inc ax
finish:
mov ax,4cH
int 21H
code ends
end start
根据上面两个例子可以看出 :
jmp short [symbol]
该指令在编译的时候 , 编译器会将该指令的的操作数直接通过计算替换为目标地址到当前地址的偏移
也就是让 ip 自增偏移的大小
也就是说 :
(ip) = (ip) + 8位偏移
8位数偏移的范围是 : -128~127
属于 : 段内短转移
还有一条和 jmp short [symbol]
相近的指令 :
jmp near ptr [symbol]
(ip) = (ip) + 16位偏移
16位数偏移的范围是 : -32768~32767
属于 : 段内近转移