汇编语言[王爽]-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
根据位移进行转移的意义
便于浮动装配