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

概述

Untitled

依据位移进行转移的jmp

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

Untitled

为什么算的是jmp后一条指令和标号的偏移量?取值执行

实际上, jmp short 标号 的功能为 (IP)=(IP)+8位位移

补码表示:-128-127

Untitled

jmp near ptr 标号 的功能为: (IP) = (IP)+16位位移

补码表示:-32768-32767

Untitled

如果跳转时越界,则会在编译时报错

依据指令中的地址进行转移的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

Untitled

  • BD0B 表示段地址 0BBD
  • 0B01 表示段偏移 010B

转移地址在寄存器中的jmp指令

指令格式: jmp 16位reg

功能: (IP)=(16位reg)

转移地址在内存中的jmp

  1. jmp word ptr 内存单元地址(段内转移) (IP) = (内存单元地址)
  2. jmp dword ptr 内存中的单元地址(段间转移) (CS)=(内存单元地址+2); (IP)=(内存单元地址)

内存单元的大小是word

内存单元的大小是word

内存单元的大小是double word

内存单元的大小是double word

loop指令

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

Untitled

根据位移进行转移的意义

便于浮动装配

Untitled

posted @ 2025-09-15 16:05  Miaops  阅读(3)  评论(0)    收藏  举报