汇编语言[王爽]-09 转移指令的原理【jmp和loop】
概述

依据位移进行转移的jmp
jmp short/near ptr 标号 的机器码中,并不包含转移的目的地址,而是包含转移的位移,也就是ip的偏移量

为什么算的是jmp后一条指令和标号的偏移量?取值执行
实际上, jmp short 标号 的功能为 (IP)=(IP)+8位位移
补码表示:-128-127

jmp near ptr 标号 的功能为: (IP) = (IP)+16位位移
补码表示:-32768-32767

如果跳转时越界,则会在编译时报错
依据指令中的地址进行转移的jmp
jmp far ptr标号 :段间转移,又称为远转移。
- (CS) = 标号所在段的段地址
- (IP) = 标号在段中的偏移地址
assume cs:codesg
codesg segment
start:
mov ax,0
mov bx,0
jmp far ptr s
db 256 dup (0)
s:
add ax,1
inc ax
codesg ends
end start

BD0B表示段地址 0BBD0B01表示段偏移 010B
转移地址在寄存器中的jmp指令
指令格式: jmp 16位reg
功能: (IP)=(16位reg)
转移地址在内存中的jmp
jmp word ptr 内存单元地址(段内转移)(IP) = (内存单元地址)jmp dword ptr 内存中的单元地址(段间转移)(CS)=(内存单元地址+2); (IP)=(内存单元地址)

内存单元的大小是word

内存单元的大小是double word
loop指令
loop指令为循环指令,所有的循环指令都是 短跳转 ,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为 -128~127

根据位移进行转移的意义
便于浮动装配


浙公网安备 33010602011771号