【汇编】#3 8086与数据有关的寻址方式

文章目录

  • 操作码与操作数
    • 1. 8086处理器的与数据有关的寻址方式
      • 1.1 立即数寻址方式
      • 1.2 寄存器寻址方式
    • 2. 有效(偏移)地址(effective address,EA)与缺省段寄存器选择
      • tips:段跨越前缀
      • 2.1 直接寻址
        • tips:直接寻址与立即寻址的差别
      • 2.2 寄存器间接寻址方式
      • 2.3 寄存器相对寻址方式
      • 2.4 基址变址寻址方式
      • 2.5 相对基址变址寻址方式


操作码与操作数

指令由操作码操作数两部分组成。

  • 操作码 说明计算机要执行的操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分。
  • 操作数 是指令执行的参与者,即各种操作的对象。也就是指令执行操作过程中需要的操作数。有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数,通常称为一地址指令、二地址指令、三…
  • 基本格式如图
    在这里插入图片描述

80x86的大多数运算型指令采用二地址指令,少数采用三地址指令。

操作数是指令的一部分,存放在代码段中

计算机只能识别二进制代码,所以机器指令是用二进制代码组成的。为便于人们使用采用汇编语言来编写程序。汇编语言中采用助记符表示操作码,用符号表示操作数或操作数地址。它与机器指令一一对应

1. 8086处理器的与数据有关的寻址方式

寻址、寻址方式的概念

  • 寻址就是寻找操作数的地址(如何找到指令所需数据、
    指令执行结果存放到哪里?寄存器/存储器)。
  • 寻址方式就是指令中用于说明操作数所在地址的方法。

寻址方式又可分成两种:与数据有关的寻址方式、与转移地址有关的寻址方式


1.1 立即数寻址方式

操作数直接存放在指令中,紧跟在操作码之后,它作为指令的 一部分存放在代码段中,这种操作数称为立即数寻址。

MOV AX, 3064H 执行后(AX)=3064H

**tips:**立即数只能作为源操作数,一般用来初始化寄存器或变量;另外需要注意数据长度应和目的操作数范围内(不要将如16位数据传入8位寄存器)

1.2 寄存器寻址方式

操作数存储在寄存器中,指令中指定寄存器号,这种寻址方式称为寄存器寻址方式。

在该寻址方式下可以引用的寄存器有:

  • 8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL;
  • 16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;
  • 32位寄存器: EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP和段寄存器等;

MOV AX,BX
执行前,(AX)=3064H,(BX)=1234H
执行后:(AX)=1234H,(BX)=1234H

tips:

  • 指令中源操作数和目的操作数都是寄存器时,必须采用同样字长的寄存器,否则汇编时会出错;(即使是如MOV BX,AL这种操作也不可)
  • 两个操作数不能同为段寄存器
  • 目的操作数不能为代码段寄存器(CS)。

2. 有效(偏移)地址(effective address,EA)与缺省段寄存器选择

当寻址方式中操作数都在除代码段之外的存储区中(下面介绍的都是)。通过不同的寻址方式,需要先获得操作数地址,从而取得操作数。

操作数的物理地址等于段基址,再加上偏移地址而取得。其中段基地址可以从段寄
存器取得或者通过段寄存器计算得到
,那么得到物理地址的重点就在于如何获取偏移地址(有效地址)

有效地址(EA)由以下4种成分组成

  • 位移量(displacement):存放在指令中的一个8位或16位或32位的数,但它不是立即数,而是一个地址
  • 基址(base):存放在基址寄存器(如BX、BP)中的内容。它是有效地址中的基址部分,通常用于指向数据段中数
    组或字符串的首地址。
  • 变址(index):存放在变址寄存器(如SI、DI)中的内容。通常用来指向数组中某个元素或字符串的某个字符。
  • 比例因子(scale factor)是386以以后机型新增加的寻址方式中的一个术语,其值可以是1、2、4或8。
    有效地址(EA)可以用下列式子表示:EA=基址+(变址x比例因子)+位移量
  • 此外不允许使用AX、CX、DX 存放 EA

8086/8088只能使用16位寻址方式,有效地址只有3种成分组成,无比例因子

又因为物理地址((PA—Physical Address)=段地址(此处指有效地址)×16(即十六进制数后加一个0) + 偏移量

故为了得到物理地址我们还需要知道段地址,缺省选择规则如表

访存类型所用段及段寄存器缺省选择规则
指令代码段 CS寄存器用于取指
堆栈堆栈段 SS寄存器所有堆栈的进栈和出栈
局部数据数据段 DS寄存器一般数据
目的串附加数据段 ES寄存器串处理指令目的串

8086/8088允许程序员使用段跨越前缀来改变系统指定的默认段。但以下3种情况不允许使用段跨越前缀。

  • 指令必须在代码段CS中;
  • PUSH指令的源操作数和POP指令的目的操作数必须使用SS段;
  • 串处理指令的目的串必须使用附加段ES;

tips:段跨越前缀

当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。

汇编格式:段寄存器名:操作数地址。
冒号“ : ”之前的段寄存器名指明操作数所在的段。
eg: MOV AX,DS:[BP] /MOV CX,SS:[SI]
该例中,DS:、SS:均为跨段前缀,此时默认状态无效(BP默认段为SS)
操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。
上述2条指令的源操作数物理地址分别为:
PA1 =(DS)左移4位+[BP]
PA2 =(SS)左移4位+ [SI] (十六进制左移1位)
在这里插入图片描述

在不使用段超越前缀的情况下,有下列规定:

  • 若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存
    器为DS;
  • 若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆
    栈段)。

2.1 直接寻址

操作数的有效地址只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值即操作数的有效地址。

eg:MOV AX ,[2000H]设(DS)=3000H。 执行后:(AX)=30000H+2000H

tips:直接寻址与立即寻址的差别

对于内存变量名(符号地址)其本身就表示其地址,所以对于如下
MOV AX, 1234H != MOV AX, [1234H] 前者是立即寻址,后者是直接寻址
MOV AX, VARW == MOV AX, [VARW] 两者是等效的,均为直接寻址


2.2 寄存器间接寻址方式

当操作数的有效地址只包含基址寄存器内容或者变址寄存器内容一种成分。因此有效地址就在某个寄存器中,而操作数则在存储器中。(16位寻址可用的寄存器:BX,BP,SI,DI)

汇编格式:目标寄存器名,[源寄存器名]

eg:MOV AX, [BX],在执行时,(DS)=2000H,(BX)=1000H,存储单元21000H的内容是50A0H。问执行指令后,AX的值此时存储50A0H
注意寄存器BX存储的值不是操作数的值,而是操作数的地址。
在这里插入图片描述


2.3 寄存器相对寻址方式

操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位偏移量之和。 (寄存器的规定同寄存器间接寻址)

汇编格式:目标寄存器名,X[寄存器R](X表示位移量,16位寻址:X是8位或16位二进制补码表示的有符号数)
功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA

在这里插入图片描述
eg:
MOV AX, COUNT[SI]MOV AX, [COUNT+SI]
假设 (DS)=3000H, (SI)=2000H, COUNT=3000H(符号地址),则: PA = (30000H+(2000))
假设(35000H)=1234H, 那么 (AX)=1234H(值 不是地址)


2.4 基址变址寻址方式

操作数有效地址是一个基址寄存器(如BX、BP)和一个变址寄存器(如SI、DI)的内容之和。 有效地址由两种成分组成。

在这里插入图片描述
MOV BX, [BX+SI] or MOV AX, [BX] [SI],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。执行后,BX的值是1234H


2.5 相对基址变址寻址方式

操作数有效地址是一个基址寄存器(如BX、BP)的值与一个变址寄存器(如SI、DI)的值和指令中的偏移量之和。(16位寻址位:移量为8位/16位) 有效地址由三种成分组成。

在这里插入图片描述
eg:
MOV AX, [BX+SI+200H] or MOV AX, BX [SI+200H] or MOV AX, BX SI 200H
在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,(AX)=10000H+(2100H+0010H+10H)

这种寻址方式通常用于二维数组的寻址


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

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

相关文章

GitOps实践之Argo CD (2)

argocd 【-1】argocd可以解决什么问题? helm 部署是手动的?依赖流水线。而有时候仅仅更新一个小东西,流水线跑好久,CD真的不应该和CI耦合。不同环境的helm配置不同,手动修改问题多,可以用git管理起来,例如分不同环境用目录区分。argocd创建应用可以不通环境部署到不同集…

Seata 2.x 系列【12】高可用集群部署

有道无术,术尚可求,有术无道,止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址:https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 搭建演…

Linux下新增有root权限的用户

步骤: 1.以 root 用户身份登录到 CentOS 服务器。 2.使用以下命令创建新用户(将 newuser 替换为您想要创建的用户名): sudo adduser username 3.为新用户设置密码: sudo passwd username 按照提示输入新增用户密码 …

计算机基础1-汇编基础

汇编语言是一种低级的计算机语言,它直接与计算机硬件进行交互。在汇编语言中,指令由一系列助记符(mnemonic)组成,用于执行特定的操作,如数据传输、算术运算和控制流程等。每个指令都对应着一条机器码&#…

《数据安全法》关于数据出境的条款

《数据安全法》关于数据出境的条款 《中华人民共和国数据安全法》于2021年6月10日通过,2021年9月1日起实施)。 在《数据安全法》中,第三十一条:“关键信息基础设施的运营者在中华人民共和国境内运营中收集和产生的重要数据的出境…

Golang如何使用命令行-- flag库

参考文献: flag package - flag - Go Packages 使用: import "flag" var nFlag flag.Int("n", 1234, "help message for flag n") 上述方法返回的是一个指针变量nFlag,如果我们要打印,应该使用…

声卡喊话IP喇叭,IP网络吸顶天花喇叭

声卡喊话IP喇叭,IP网络吸顶天花喇叭 SV-7043VP是一款ip/sip网络吸顶喇叭,具有10/100M以太网接口,从网络接口接收网络的音频数据后播放。本网络吸顶喇叭可以与其他广播主机、服务器软件和采播主机配合使用,实现音频的播放&#xf…

大语言模型:Query Rewriting for Retrieval-Augmented Large Language Models

总体思路 作者首先指出大语言模型虽然取得了很好的效果,但是仍然存在幻觉和时间顺序混乱的问题,因此需要额外知识库和LLM内部知识库相结合,来修正;因此优化传统的retriever-reader的方案成为需要;目前的研究方案当中使…

log4cplus在Qt linux中的应用与问题解决

log4cplus在Qt linux中的应用与问题解决 背景log4cplus下载遇到问题:libm.so.6:undefined reference to __strtof128_nanGLIBC_PRIVATE‘解决方案编译生成在Qt工程里面添加对应依赖编译运行成功 背景 最近工作中需要用到log4cplus的日志做一些记录,用了…

html5cssjs代码 010 个人简历模板一

html5&css&js代码 010 个人简历模板一 一、代码二、解释 这段HTML代码定义了一个个人简历的页面布局和样式。页面分为多个部分,包括基本信息、自我评价、工作经历、教育经历、软件产品及著作、未来研究方向等。每个部分都使用section标签包裹,并…

Linux——ELK日志分析系统

实验环境 虚拟机三台CentOS 7.9, 组件包 elasticsearch-5.5.0.rpm elasticsearch-head.tar.gz node-v8.2.1.tar.gz phantomjs-2.1.1-linux-x86_64.tar.bz2 logstash-5.5.1.rpm kibana-5.5.1-x86_64.rpm 初始…

Lombok原理及实例(Java) - 简化JavaBean开发

Lombok 1.作用:简化javabean开发 2.使用:a.下插件 -> 如果是idea2022不用下载了,自带b.导lombok的jar包c.修改设置 1.lombok介绍 Lombok通过增加一些“处理程序”,可以让javabean变得简洁、快速。 Lombok能以注解形式来简化java代码,提高开发效…

国金证券春招算法岗面试

没有去官网投,在BOSS直聘上投递,HR打电话确认过出勤后给用人部门评估,最后直接让用人部门的小leader面试,是一个博士 面试过程: 1.先介绍一下自己 2.介绍一下做过的项目 3.项目里自己具体做哪些工作 4.项目里怎么…

优选算法[1]

目录 1.双指针; 2.滑动窗口; 3.二分查找; 4.前缀和; 1.双指针; 包括对撞指针和快慢指针(一般用来循环); 题目类型:移动零,复写零,快乐数,盛…

【UE5】动画混合空间的基本用法

项目资源文末百度网盘自取 什么是动画混合空间 混合空间分为两种: 通过一个数值控制通过两个数值控制 下面通过演示让大家更直观地了解 在Character文件夹中单击右键,选择动画(Animation),选择旧有的混合空间1D 然后选择骨骼(动画是基于骨骼显示的,所以需要选择…

vue防止用户连续点击造成多次提交

中心思想:在第一次提交的结果返回前,将提交按钮禁用。 方法一:给提交按钮加上disabled属性,在请求时先把disabled属性改成true,在结果返回时改成false 方法二:添加loading遮罩层,可以直接使用e…

北京保险服务中心携手镜舟科技,助推新能源车险市场规范化

2022 年,一辆新能源汽车在泥泞的小路上不慎拖底,动力电池底壳受损,电池电量低。车主向保险公司报案,希望能够得到赔偿。然而,在定损过程中,保司发现这辆车的电池故障并非由拖底事件引起,而是由于…

EDM营销平台的核心功能?如何做精准营销?

EDM营销平台如何选择?怎么使用邮件营销平台优化发信? EDM营销平台以其独特的优势,成为了企业实现精准营销、提升品牌影响力的重要工具。那么,EDM营销平台究竟拥有哪些核心功能呢?接下来,AokSend就来一一探…

PyQt5---初识PyQt5相关及开发实战介绍

什么是GUI GUI是Graphical User Interface(图形用户界面)的缩写,是一种用户与计算机交互的方式,通过使用图形化的元素(如按钮、窗口、菜单等)来帮助用户完成任务。GUI使得用户可以通过鼠标、键盘等输入设备…

基类、接口、抽象类的区别

基类、接口和抽象类是面向对象编程中的三个重要概念,他们在定义和实现等方面有各自的特点,区别如下: 定义方面: 基类是一个普通的具体类,可以被实例化。 接口是一种规范(契约)或一组行为的集合…