汇编语言指令 jmp: jmp word ptr、jmp dword ptr、jmp 寄存器、jmp 段地址:偏移地址

news2025/1/11 16:47:00

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

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

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. jmp 段地址:偏移地址

        jmp 段地址:偏移地址是段间转移指令,执行该指令后,CS = 段地址,IP = 目的地址

 例如:jmp 204E:0012               ;CS = 204Eh,IP = 0012h

4. 总结

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

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

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

3. jmp 段地址:偏移地址 是段间转移指令,执行该指令后,CS = 段地址,IP = 目的地址

参考文献

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】函数入门(下)

3))* ** ​​​​​​注意:也遵循位置传参在前面,按关键字传参在后面。 代码示例: def func(*args,**kwargs):print(args,kwargs) 该函数中的参数会自动根据传参的方式不同(即:按位置…

家电行业实施数字工厂管理系统前要做好哪些准备

家电企业在实施数字工厂管理系统前,需要做好以下准备: 一、明确目标与需求 数字化转型目标:明确数字化转型的具体目标,如提高生产效率、降低生产成本、优化库存管理、提升产品质量等。这些目标将指导整个数字工厂管理系统的选择…

STM32学习笔记09-SPI通信

目录 SPI通信简介 硬件电路 移位示意图 SPI基本时序单元 SPI时序 W25Q64简介 硬件电路 W25Q64框图 Flash操作注意事项 SPI外设简介 SPI框图 SPI基本结构 主模式全双工连续传输 非连续传输 软件/硬件波形对比 SPI应用 软件SPI读写W25Q64 硬件SPI读写W25Q64 SP…

在复制 PowerPoint (PPT) 文件时,其中嵌入或者链接的 Excel 文件能够自动创建一个新的实例,而不是继续引用原始的 Excel 文件。

问题: 在复制 PowerPoint (PPT) 文件时,其中嵌入或者链接的 Excel 文件能够自动创建一个新的实例,而不是继续引用原始的 Excel 文件。 解答: 导入已有的excel实测是不行的

为什么程序员应该学习多种语言?

前言 有一句老话适用于所有软件开发人员:知道得越多,成长得越多。程序员学习多种编程语言后、‌可以加速学习新技术、‌拓展认知和视野。‌ 对于程序员来说,‌精通一门编程语言意味着对该语言有深入的理解和熟练的运用,‌这为程…

LLMCompiler执行数学计算的案例

LLMCompiler执行数学计算的案例 LLMCompiler执行数学计算的案例案例代码LLMCompiler的LangGrap结构可视化Tasks DAG可视化完整运行日志 LLMCompiler执行数学计算的案例 这是一个使用LLMCompiler执行数学运算的完整案例,通过设置’ print_dag 参数,可以完…

vme背板 介绍

VME背板是基于VME总线规范的背板,它是VME系统中的重要组成部分,主要负责模块之间的连接和数据传输。VMEbus(Versa Module Eurocard bus)是一种广泛应用于工业控制、军事、航空航天以及电信领域的模块化计算机总线标准。VME背板是VME系统的核心组件之一,它不仅提供了物理支…

思路超清晰的 LVS-NAT 模式实验部署

目录 一、实验原理 1、实验基础配置图 2、实验原理 二、实验环境准备 1、准备四台红帽9的主机 2、四台主机的基础配置 (1)client 1)配置主机名:client 2)配置ip:172.25.254.200 (2)lv…

DAMA学习笔记(十四)-数据管理成熟度评估

1.引言 能力成熟度评估(Capability Maturity Assessment,CMA)是一种基于能力成熟度模型(Capability Maturity Model,CMM)框架的能力提升方案,描述了数据管理能力初始状态发展到最优化的过程。CM…

掌握VS Code调试技巧:解决Scrapy模块导入中断问题

介绍 在使用Scrapy进行网页爬取时,Visual Studio Code(VS Code)作为一款流行的代码编辑器,凭借其强大的调试功能,成为了许多开发者的首选。然而,部分开发者在调试Scrapy爬虫时,常遇到程序在模块…

《剑指offer》题目 C++详细题解

JZ15 二进制中1的个数 核心考点:二进制计算 思路一:使用一个循环,因为我们知道整型变量只有32位,所以循环结束的条件就是到32,从最低位开始,逐位检查数字 n 的二进制表示,利用位运算中的与运算…

Ubuntu22.04自动化安装Redis脚本(实测可用)

redis自动化安装脚本 #!/bin/bash# 检查 Redis 是否已安装 if dpkg -l | grep -q redis-server; thenecho "Redis 已安装"exit 0 elseecho "Redis 未安装,正在安装..."# 更新包列表sudo apt-get update# 修复系统中的破损依赖关系sudo apt --f…

教你用JQ怎么循环遍历数据,学会直接月入过万,不够我给你补!

1.先看数据类型。这是一个标准得json返回值 {"code": 200,"msg": "请求成功!","data": [{"itemName": "给阿姨倒一杯卡布奇诺","unit": "颗","count": 6},{"item…

c语言 图片.bmp读写示例

1 图片.bmp数据结构 BMP(Bitmap)文件格式是一种简单的位图图像格式,其数据结构分为几个主要部分:文件头、信息头、调色板(可选)和像素数据。下面是各部分的详细说明。 文件头(File Header&…

zabbix看图表的时候标题是乱码

直接进入到:/usr/share/zabbix/assets/fonts 然后进入到windows下边fonts选择一个自己喜欢的字体,上传到/usr/share/zabbix/assets/fonts 然后把内容graphfont.ttff覆盖即可

《网络编程实战系列》(17)网络桥接模式

文章目录 **桥接模式的基本原理****桥接模式的应用场景****桥接模式的优缺点****桥接模式的实现****总结**桥接模式(Bridge Mode)是一种网络配置模式,用于将多个网络接口或网络段连接在一起,使其在逻辑上形成一个单一的网络。这种模式常用于在不同网络之间传递数据包,并使…

超详解Haproxy七层代理及配置

1.七层、四层负载及正、反向代理 1.1四层与七层负载均衡的区别 所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量四层的负载均衡,就是通过发布三层的IP地址(VIP),然…

C语言—函数栈帧

函数,一般都有返回值,函数名,参数,再下来还有什么mian函数,函数写出来就是要被调用的,上面图片上的代码,main函数和myadd函数,都要在自己的栈结构什么形成自己的栈,可以帮…

如何获取VS Code扩展的版本更新信息

获取VS Code 扩展的版本更新的需求 因为企业内部有架设私有扩展管理器的要求,但是对于一些官方市场的插件,希望可以自动获取这些扩展的更新并上传至私有扩展管理器。于是就有了本篇介绍的需求: 通过API的方式获取VS Code 扩展的更新。 关于…

Spring Boot集成sentinel快速入门Demo

1.什么是sentinel? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、…