汇编语言指令 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版)》王爽

相关推荐
看到我,请让我去学习32 分钟前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
GUET_一路向前1 小时前
【C语言防御性编程】if条件常量在前,变量在后
c语言·开发语言·if-else·防御性编程
曳渔1 小时前
UDP/TCP套接字编程简单实战指南
java·开发语言·网络·网络协议·tcp/ip·udp
三千道应用题1 小时前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf
hqxstudying1 小时前
JAVA项目中邮件发送功能
java·开发语言·python·邮件
咪咪渝粮1 小时前
JavaScript 中constructor 属性的指向异常问题
开发语言·javascript
最初的↘那颗心1 小时前
Java HashMap深度解析:原理、实现与最佳实践
java·开发语言·面试·hashmap·八股文
后台开发者Ethan2 小时前
Python需要了解的一些知识
开发语言·人工智能·python
常利兵3 小时前
Kotlin作用域函数全解:run/with/apply/let/also与this/it的魔法对决
android·开发语言·kotlin
幼稚园的山代王3 小时前
Kotlin-基础语法练习一
android·开发语言·kotlin