热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析8086CPU的转移指令

本文详细介绍了8086CPU中的转移指令,包括无条件转移、条件转移、循环指令及过程调用等,同时探讨了offset操作符的功能及其应用实例。

在8086 CPU的指令集中,转移指令是一类非常重要的指令,用于控制程序的执行流程。这些指令可以分为几大类:无条件转移指令、条件转移指令、循环指令以及过程调用和中断处理指令。



  • 无条件转移指令(如:jmp):这类指令不依赖于任何条件,直接跳转到指定的地址继续执行。

  • 条件转移指令:这类指令会根据特定的条件是否满足来决定是否进行跳转。

  • 循环指令(如:loop):用于实现循环结构,通常与计数器结合使用。

  • 过程调用:用于调用子程序,执行完毕后返回调用点继续执行。

  • 中断处理:用于响应外部或内部中断事件,执行相应的中断服务程序。


在汇编语言中,offset 是一个由汇编器处理的符号,其主要作用是获取标签的偏移地址。例如,在定义变量时,可以通过 lea ax, [var] 来获取变量 var 的偏移地址。















类型功能示例
jmp short 标签段内短距离转移

assume cs:code
code segment
start:
mov ax, 0
jmp short s
add ax, 1
s: inc ax
code ends
end start



jmp near ptr 标签段内近距离转移
jmp far ptr 标签段间转移

assume cs:code
code segment
start:
mov ax, 0
mov bx, 0
jmp far ptr sdb
256 dup (0)
code ends
end start



jmp 16位寄存器段内转移,设置 (IP)=(16位寄存器)
jmp word ptr 内存地址段内转移,通过内存地址间接跳转

mov ax, 0123H
mov ds:[0], ax
jmp word ptr ds:[0]



jmp dword ptr 内存地址段间转移,通过内存地址间接跳转

mov ax, 0123H
mov ds:[0], ax
mov word ptr ds:[2], 0
jmp dword ptr ds:[0]



jmp 2000:0100段间转移,直接指定段地址和偏移地址


所有条件转移指令和循环指令都是短距离转移,即转移范围限制在 -128 到 127 字节之间。这些指令的机器码中包含的是相对于当前指令地址的偏移量,而不是绝对的目标地址。










类型功能
jcxz如果 CX 寄存器为零,则跳转
loop如果 CX 寄存器不为零,则减一并跳转


下面是一个利用条件转移和循环指令的例子:



1 assume cs:codesg
2
3 codesg segment
4 mov ax, 4c00h
5 int 21h
6
7 start:
8 mov ax, 0
9 s: nop ; jmp short s1
10 nop
11
12 mov di, offset s
13 mov si, offset s2
14 mov ax, cs:[si]
15 mov cs:[di], ax
16
17 s0: jmp short s
18
19 s1: mov ax, 0
20 int 21h
21 mov ax, 0
22
23 s2: jmp short s1
24 nop
25
26 codesg ends
27
28 end start



通过使用调试工具查看汇编指令,可以更好地理解这个程序的工作原理,特别是如何通过条件转移和循环指令实现特定的逻辑控制。


推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 配置Windows操作系统以确保DAW(数字音频工作站)硬件和软件的高效运行可能是一个复杂且令人沮丧的过程。本文提供了一系列专业建议,帮助你优化Windows系统,确保录音和音频处理的流畅性。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 本文介绍了 Winter-1-C A + B II 问题的详细解题思路和测试数据。该问题要求计算两个大整数的和,并输出结果。我们将深入探讨如何处理大整数运算,确保在给定的时间和内存限制下正确求解。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
author-avatar
海and云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有