【汇编】#4 8086与转移地址有关有关的寻址方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、CS与IP功能
    • tips:CS、IP复位值
  • 二、修改CS与IP的指令
    • 1. jmp指令
  • 三、与转移地址有关的寻址方式
    • 1、段内转移
      • 1.1 段内直接寻址
      • 1.2 段内间接寻址
    • 2. 段间转移
      • 2.1 段间直接寻址
      • 2.2 段间间接寻址


一、CS与IP功能

CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址

CS为代码段寄存器,IP为指令指针寄存器
在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存Mx16+N单元开始,读取一条指令并执行

即8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行

tips:CS、IP复位值

8086CPU 加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令 执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令

二、修改CS与IP的指令

1. jmp指令

8086CPU为CS、IP提供了特殊的指令来改变它们的值。能够改变CS、IP的内容的指令被统称为转移指令

若想同时修改CS、IP的内容,可用形如jmp 段地址:偏移地址的指令完成。
eg:
jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。
jmp 3:0B16,执行后:CS=0003H,IP=0B16H,CPU将从00B46H处读取指令。

  • jmp 段地址:偏移地址指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP
  • 若想仅修改IP的内容,可用形如“jmp 某一合法寄存器”的指令完成,如
    jmp ax,指令执行前:ax=1000H,CS=2000H,IP=0003H 指令执行后:ax=1000H,CS=2000H,IP=1000H
  • “jmp 某一合法寄存器”指令的功能为:用寄存器中的值修改IP。jmp ax在含义上好似:mov IP,ax(当然这么写不合法)。

三、与转移地址有关的寻址方式

该类寻址方式用来确定转移指令及call指令的转向地址(=转向段地址X16+转向有效地址)

  • 转向地址是由各种寻址方式得到的转向有效地址和段地址相加而成的,有效地址存入IP寄存器中,段地址指定为CS段寄存器内容

1、段内转移

段内转移是指程序在同一代码段内,仅改变IP寄存器的值,而不改变CS寄存器的值所发生的转移。段内转移又分为段内直接转移和段内间接转移


1.1 段内直接寻址

转向的有效地址 = 当前(IP) + 位移量(8bit/16bit)

转向有效地址(不是转向地址)用相对于当前IP值的位移量来表示的,所以它是一种相对寻址方式。指令中的位移量是有效地址与当前IP值之差
这种寻址方式适用于条件转移无条件转移指令

  • 无条件转移在位移量为8位时称为短转移(SHORT),位移量为16位时则称为近跳转(NEAR PRT),仅做标示

    • JMP SHORT QUEST
      其中QUEST表示转移的符号地址,操作符SHORT表示是个8位带符号数,数的范围是80H ~ 7FH,即 -128 ~ +127。它只能相对于当前IP(转移指令的下一条指令的首地址)所指的位置作-128 ~ +127范围内跳转,所以称为短跳转,是一种相对寻址。
    • JMP NEAR PTR PROGA
      其中PROGA表示转移的符号地址,操作符NEAR PRT表示是个16位带符号数,数的范围是8000H ~ 7FFFH,即-32768 ~ +32767。它只能相对于当前IP所指的位置作-32768 ~ +32767范围内跳转,所以称为近跳转,是一种相对寻址。

1.2 段内间接寻址

转向的有效地址一个寄存器或存储单元的内容。可用除立即数以外的任何一种数据寻址方式得到,所得到的转向的有效地址取代IP寄存器的内容

  • 形如:JMP BXJMP WORD PTR [BP+TABLE] ,WORD表示取该位置内容的一个字(两个字节)来作为IP内容

    • 已知 TABLE=20A1H ,(BX)=1256H ,(SI)=528FH,(DS)=2000H ,(232F7H)= 3280H ,(264E5H)=2450H。
      JMP BX ——>(IP)=1256H
      JMP WORD PTR TABLE[BX]——> 跳转到的物理地址为DS<<1+(BX+TABLE) =232F7H,该地址存储内容为3280H,故此时(IP)=3280H
      JMP WORD PTR [BX][SI] ——>(IP)=2450H(同理)

2. 段间转移

当程序在不同段间转移时,不仅要改变IP寄存器的值,同时也要改变CS寄存器的值,这种转移称为段间转移。段间转移又分为段间直接转移和段间间接转移。


2.1 段间直接寻址

用指令中提供的转向段地址和偏移地址取代CS和IP

形如 jmp far ptr next

  • far表示转移距离大于±32K,或是不同段之间转移
  • next表示自身在另一段程序里面的偏移地址 ,IP寄存器存储此时next的偏移地址
  • CS寄存器此时传入next所在的另一个程序的CS段地址

在这里插入图片描述


2.2 段间间接寻址

用存储器中的两个相继字的内容取代IP 和 CS,存储单元的地址可用存储器寻址方式得到。

在这里插入图片描述

  • JMP DWORD PTR [TABLE+BX] 与段内间接寻址类似,此处DWORD指读取双字(四个字节作为CS和IP的新地址)
    • 若DS=3000H,BX=1200H,TABLE=0020H,则存储单元的PA=30000+0020+1200=31220H,指令执行前,CS=0000H,IP=1000H,(31220H)=40H,(31221H)=01H,(31222H)=00H,(31223H)=10H。指令执行后,CS=1000H,IP=0140H,(31220H)=40H,(31221)=01H,(31222H)=00H,(31223)=10H。
      在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3588-PCIe

1. 简介 PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;是一种用于连接主板和外部设备的高速串行接口标准。它是 PCI 技术的后继者&#xff0c;旨在提供更高的带宽和更好的性能。 高速传输&#xff1a; PCIe接口提供了高速的数据传输通道&#xff0…

AHU 汇编 实验四

实验名称&#xff1a;实验四 两个数的相乘 实验内容&#xff1a; 用子程序形式编写&#xff1a; A*B&#xff1a;从键盘输入a和b&#xff0c;计算A*B&#xff0c;其中乘法采用移位和累加完成 实验过程&#xff1a; 源代码&#xff1a; data segmentmul1 db 16,?,16 dup(?…

Jenkins cron定时构建触发器

from&#xff1a; https://www.jenkins.io/doc/book/pipeline/syntax/#cron-syntax 以下内容为根据Jenkins官方文档cron表达式部分翻译过来&#xff0c;使用机翻加个人理解补充内容&#xff0c;包括举例。 目录 介绍举例&#xff1a;设置方法方法一&#xff1a;方法二&#xf…

web | http 的一些问题 | get/post的区别 | http版本 | http与https的区别 | session、cookie、token

怎么来说呢&#xff1f;这应该算一个大类了&#xff0c;基本上设计网络的应用层 当然重要的是从网络层----->应用层 &#xff08;杠精勿杠&#xff0c;知道中间还有其他层&#xff09; 先来讲一下http的结构 都知道http 有三部分&#xff0c;头部、请求头和body 头部&#x…

SQLiteC/C++接口简介

上一篇&#xff1a;SQLite——世界上部署最广泛的开源数据库&#xff08;简介&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍&#xff08;一&#xff09; 引言&#xff1a; 作为一种轻量级、嵌入式关系型数据库&#xff0c;SQLite已经成为许多应用和系统的首选解决方…

Discord OAuth2授权以及机器人监听群事件

下面文章讲解获取OAuth2授权整个流程&#xff0c;创建机器人&#xff0c;使用机器人监听工会&#xff08;工会就是创建的服务器&#xff09;成员变化等等&#xff0c;对接国外的都是需要VPN的哦&#xff0c;对接的时候记得提前准备。 创建应用 点击 此页面添加应用,&#xff…

使用kettle批量加载数据到kadb

测试环境 达梦数据库版本&#xff1a;DM Database Server 64 V8 03134284132-20240115-215128-20081&#xff08;官网测试版&#xff09;KADB版本&#xff1a;KADB V003R002C001B0181Kettle版本&#xff1a;pdi-ce-9.4.0.0-343&#xff08;官网下载&#xff09;Python版本&…

解释“RNN encode-decode”

“RNN encode-decode” 涉及使用循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;来执行编码和解码操作。这种结构常用于处理序列数据&#xff0c;例如自然语言处理、语音识别和时间序列预测等任务。 以下是 “RNN encode-decode” 的一般概念&a…

Flink实操:Flink SQL实现SFTP文件读写操作

一、背景 公司需要将Doris数据库中的部分表数据同步至SFTP服务器&#xff0c;以供其他合作企业安全读取和使用。目前&#xff0c;平台数据同步功能统一使用Flink引擎进行实时同步、离线同步的工作。因此&#xff0c;希望能够充分利用现有的Flink引擎&#xff0c;并将其复用于这…

四 超级数据查看器 讲解稿 列表功能1

四 超级数据查看器 讲解稿 列表功能1 点击此处 以新页面 打开B站 播放教学视频 APP下载地址 百度手机助手 下载地址4 讲解稿全文&#xff1a; 大家好&#xff0c;今天我们讲解一下&#xff0c;超级数据查看器列表界面&#xff0c;分为1-2两集。 首先&#xff0c…

ChatGPT+MATLAB应用

MatGPT是一个由chatGPT类支持的MATLAB应用程序&#xff0c;由官方Toshiaki Takeuchi开发&#xff0c;允许您轻松访问OpenAI提供的chatGPT API。作为官方发布的内容&#xff0c;可靠性较高&#xff0c;而且也是完全免费开源的&#xff0c;全程自己配置&#xff0c;无需注册码或用…

MySQL的加锁规则

学习了MySQL的锁后&#xff0c;知道其有这么多锁&#xff0c;那应该会有些疑惑&#xff0c;这么多锁&#xff0c;究竟我在写sql语句时候用到哪个锁的&#xff0c;什么情况是用什么锁的&#xff1f;在哪里查看该sql语句是用了哪些锁的呢&#xff1f;加锁的规则是什么呢&#xff…

【C++初阶】第六站 : 模板初阶

前言&#xff1a; 本章知识点&#xff1a;泛型编程、函数模板、类模板 专栏&#xff1a; C初阶 目录 泛型编程 函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 如何实现一…

Redis 的基本全局命令

前言 Redis 常用的有 5 种数据结构&#xff0c;字符串&#xff0c;列表&#xff0c;哈希表&#xff0c;集合&#xff0c;有序集合&#xff0c;每一种数据结构都有自己独特的命令&#xff0c;但也有些通用的全局命令&#xff0c;本文所提到的是最基本的命令&#xff0c;Redis 的…

linux查看文件内容cat,less,vi,vim

学习记录 目录 catlessvi vim cat 输出 FILE 文件的全部内容 $ cat [OPTION] FILE示例 输出 file.txt 的全部内容 $ cat file.txt查看 file1.txt 与 file2.txt 连接后的内容 $ cat file1.txt file2.txt为什么名字叫 cat&#xff1f; 当然和猫咪没有关系。 cat 这里是 co…

使用 IDEA 将本地jar上传到本地maven仓库

IDEA中的操作步骤 创建一个 Maven 运行配置 在开发工具的导航栏中&#xff0c;点击选择配置&#xff1a; 在配置界面点击左上角的加号&#xff0c;随后选择增加一个maven运行配置&#xff1a; 编辑 Maven 配置 上图中的含义&#xff1a; Name 对应的是本配置的名字、用处或功…

PyTorch搭建AlexNet训练集

本次项目是使用AlexNet实现5种花类的识别。 训练集搭建与LeNet大致代码差不多&#xff0c;但是也有许多新的内容和知识点。 1.导包&#xff0c;不必多说。 import torch import torch.nn as nn from torchvision import transforms, datasets, utils import matplotlib as p…

NFTScan | 03.04~03.10 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.03.04~ 2024.03.10 NFT Hot News 01/ 数据&#xff1a;比特币链上 NFT 过去 24 小时销售额超 3100 万美元 3 月 4 日&#xff0c;据数据显示&#xff0c;比特币链上 NFT 过去 24 小…

设计模式十:原型模式

文章目录 1、原型模式1.1 类创建过程1.2 浅拷贝1.3 深拷贝 2、示例2.1 简单形式2.2 复杂形式 3、spring中的原型模式3.1 ArrayList的原型模式3.2 spring中的原型模式 1、原型模式 原型模式就是从一个对象再创建另外一个可定制的对象&#xff0c; 而且不需要知道任何创建的细节。…