汇编语言指令 jmp: jmp word ptr、jmp dword ptr、jmp 寄存器

1. 转移地址在内存中的jmp指令有2种形式

1.1 jmp word ptr 内存单元地址

jmp word ptr 内存单元地址是段内转移指令,也就是说该指令只修改IP值,其功能是控制CPU下一条执行的指令是一个字(2个字节)内存中存放的偏移地址所指向的指令。所以,IP和内存单元地址存在关系:(IP) = (内存单元地址)

例如:

mov ax, 12h

mov ds:[0], ax

jmp word ptr ds:[0]

执行该段代码后,(IP) = 0012h

cpp 复制代码
assume cs:code, ds:data
data segment
    dw 8 dup (0)   ;定义8个2字节的dw类型数据,并初始化为0
data ends
code segment
start:
    mov ax, data            
    mov ds, ax              

    mov ax, 12h             
    mov ds:[0], ax          
    jmp word ptr ds:[0]     ;执行该指令后,IP = 0012h

    mov ax, 0               
    add ax, 2               
    inc ax

    mov ax, 4c00h
    int 21h
code ends
end start

1.2 jmp dword ptr 内存单元地址

jmp dword ptr 内存单元地址是段间转移指令,也就是说该指令可以同时修改CS和IP值,其功能是控制CPU下一条执行的指令在两个字大小的内存中,其中高字(2字节)内存中存放的是目的段地址(CS),低字(2字节)内存中存放的是目的偏移地址(IP)。

所以,CS和IP跟内存单元地址之间存在以下关系:

(1)(CS) = (内存单元地址+2)

(2)(IP) = (内存单元地址)

例如:

mov ax, 18h

mov ds:[0], ax

mov word ptr ds:[2], 204Eh

jmp dword ptr ds:[0]

;执行该段指令后,CS = 204Eh, IP = 0018h

cpp 复制代码
assume cs:code, ds:data
data segment
    dd 4 dup (0)   ;定义4个4字节的dd类型数据,并初始化为0
data ends
code segment
start:
    mov ax, data            
    mov ds, ax              

    mov ax, 18h             
    mov ds:[0], ax              ;低字内存中存放IP
    mov word ptr ds:[2], 204Eh  ;高字内存中存放CS     
    jmp dword ptr ds:[0]     ;执行该指令后,CS = 204Eh, IP = 0018h

    mov ax, 0               
    add ax, 2               
    inc ax

    mov ax, 4c00h
    int 21h
code ends
end start

2. 目的地址在寄存器中的jmp指令

2.1 jmp 16位寄存器

目的地址在寄存器中的jmp指令是段内转移指令,只能修改IP,所以IP和寄存器间存在关系:(IP) = (16位寄存器)

例如

mov ax, 0123h

jmp ax ;执行该指令后,(IP) = 0123h

又例如

mov bx, 0123h

jmp bx ;;执行该指令后,(IP) = 0123h

3. 总结

  1. jmp word ptr 内存单元地址 是段内转移指令,只修改IP:(IP) = (内存单元地址)

  2. jmp dword ptr 内存单元地址 是段间转移指令,同时修改CS和IP:

(CS) = (内存单元地址 + 2),(IP) = (内存单元地址)

参考文献

《汇编语言(第4版)》王爽

相关推荐
西猫雷婶2 小时前
python学opencv|读取图像(十九)使用cv2.rectangle()绘制矩形
开发语言·python·opencv
liuxin334455662 小时前
学籍管理系统:实现教育管理现代化
java·开发语言·前端·数据库·安全
码农W2 小时前
QT--静态插件、动态插件
开发语言·qt
ke_wu3 小时前
结构型设计模式
开发语言·设计模式·组合模式·简单工厂模式·工厂方法模式·抽象工厂模式·装饰器模式
code04号3 小时前
python脚本:批量提取excel数据
开发语言·python·excel
小王爱吃月亮糖3 小时前
C++的23种设计模式
开发语言·c++·qt·算法·设计模式·ecmascript
hakesashou3 小时前
python如何打乱list
开发语言·python
网络风云3 小时前
【魅力golang】之-反射
开发语言·后端·golang
Want5954 小时前
Java圣诞树
开发语言·python·信息可视化
运维小文4 小时前
python之打印、变量、格式化输出
开发语言·python·python基础·hello world