热门标签 | 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



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


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文探讨了使用Java创建高效且可靠的基准测试的方法,强调了选择合适的工具和理解潜在影响因素的重要性。 ... [详细]
  • 本文探讨了在C语言编程中,如何有效避免多文件项目中的重定义问题,通过合理使用预处理器指令和extern关键字,确保代码的健壮性和可维护性。 ... [详细]
  • 交互式左右滑动导航菜单设计
    本文介绍了一种使用HTML和JavaScript实现的左右可点击滑动导航菜单的方法,适用于需要展示多个链接或项目的网页布局。 ... [详细]
  • 推荐两款实用的网络诊断工具
    大家好,因为一些私事很久没有更新博客了。今天向大家介绍两款非常有用的网络诊断工具——Tracert和Telnet,帮助你更好地理解和解决网络问题。 ... [详细]
  • 在使用MFC进行项目开发时,可能会遇到编译错误C2244,提示函数定义与现有声明不匹配。本文将详细介绍这一错误的原因及解决方案。 ... [详细]
  • 性能测试工具的选择与应用
    本文探讨了性能测试工具的重要性及其在软件测试中的作用,重点介绍了选择合适性能测试工具的考量因素,并对几种常用的性能测试工具进行了对比分析。 ... [详细]
  • Barbican 是 OpenStack 社区的核心项目之一,旨在为各种环境下的云服务提供全面的密钥管理解决方案。 ... [详细]
  • 本文详细介绍了Java集合框架中的Collection体系,包括集合的基本概念及其与数组的区别。同时,深入探讨了Comparable和Comparator接口的区别,并分析了各种集合类的底层数据结构。最后,提供了如何根据需求选择合适的集合类的指导。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • OBS (Open Broadcaster Software) 架构解析
    本文介绍 OBS(Open Broadcaster Software),一款专为直播设计的开源软件。文章将详细探讨其技术架构、核心组件及其开发环境要求。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • XWiki 数据模型开发指南
    本文档不仅介绍XWiki作为一个增强版的wiki引擎,还深入探讨了其数据模型,该模型可在用户界面层面被充分利用。借助其强大的脚本能力,XWiki的数据模型支持从简单的应用到复杂的系统构建,几乎无需直接接触XWiki的核心组件。 ... [详细]
  • 在学习Python的map函数过程中,由于误将一个字典类型的变量命名为map,导致程序运行时报出了 'dict' object is not callable 的错误。 ... [详细]
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社区 版权所有