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

news2024/12/22 22:44:04

文章目录

  • 操作码与操作数
    • 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.coloradmin.cn/o/1510080.html

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

相关文章

什么是农业气象站?——气象科普

农业气象站,也被称为田间气象站或农业小气候仪,是一款综合的物联网农业气象参数观测系统。它能够实时、准确、有针对性地监测农田区域内的多种气象参数,包括温湿度、光照、二氧化碳浓度、大气压、雨量、土壤温湿度、风速风向等。 农业气象站…

【MATLAB 】 EMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码,请转文末观看代码获取方式~ 展示出图效果 1 EMD信号分解算法 EMD 分解又叫经验模态分解,英文全称为 Empirical Mode Decomposition。 EMD 是一种信号分解方法,它将一个信号分解成有限个本质模态函数 (EMD) 的和&#xff0c…

【Linux】文件缓冲区|理解文件系统

目录 预备知识 观察现象 第一:携带\n,不使用fork(),打印到显示器 第二:携带\n,使用fork(),打印到显示器 第三:携带\n,使用fork(),打印到文件里 第四:不携…

【R语言实战】——金融时序分布拟合

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

常见的限流算法- python版本

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 个人IP:shigen 在系统的稳定性设计中,需要考虑到的就是限流,避免高并发…

DC/DC高压模块直流升压可调稳压输出升压变换器5V12V24V48V转50V110V150V130V200V250V300V450V500V600V800V

特点 效率高达 80%以上1*2英寸标准封装单电压输出价格低稳压输出工作温度: -40℃~85℃阻燃封装,满足UL94-V0 要求温度特性好可直接焊在PCB 上 应用 HRB W2~40W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为:4.5~9V、9~18V、及18~36V、…

容量治理三板斧:扩容、限流与降级

前言 随着现代软件系统日益复杂和用户规模的不断增长,分布式架构成为了保持系统高可用性与高性能的标准解决方案。然而,随之而来的是对系统容量治理的新挑战。在这样的背景下,容量治理成为了分布式系统设计和运维中不可或缺的一环。要确保系…

【PyTorch][chapter 22][李宏毅深度学习]【无监督学习][ WGAN]【理论一】

简介: 2014年Ian Goodfellow提出以来,GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多论文都在尝试解决,但是效果不尽人意,比如最有名的一个改进DCGAN依靠的是对…

AI毕业设计生成器(基于AI大模型技术开发)支持Java和Python

这是一个辅助生成计算机毕业设计的工具,可以自动完成毕业设计的源码。它基于几百个github上面开源的java和python项目,运用tengsorflow技术,训练出了AI大模型。基本实现了计算机毕业设计生成器,能够初步生成Java或python基本源码。…

嵌入式驱动学习第三周——container_of()宏

前言 Linux内核编程中,会经常看见一个宏函数container_of,那么这究竟是什么呢,本篇博客记录学习container_of的过程。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可…

1688平台最关键的接口接入实例|获得1688商品详情| 按关键字搜索商品| 按图搜索1688商品(拍立淘)| 获得淘口令真实url

参数说明 通用参数说明 version:API版本key:调用key,测试key:test_api_keyapi_name:API类型[item_get,item_search]cache:[yes,no]默认yes,将调用缓存的数据,速度比较快result_type:[json,xml,serialize,var_export]返回数据格式,默认为jsonl…

【JavaScript 漫游】【034】AJAX

文章简介 本篇文章为【JavaScript 漫游】专栏的第 034 篇文章,对浏览器模型的 XMLHttpRequest 对象(AJAX)的知识点进行了总结。 XMLHttpRequest 对象概述 浏览器与服务器之间,采用 HTTP 协议通信。用户在浏览器地址栏键入一个网…

Cisco Packet Tracer模拟器实现交换机的vlan配置、生成树技术及模拟器路由设置

1. 内容 1.对交换机进行Vlan配置,完成交换机Vlan的划分、交换机间相同Vlan的通信以及三层交换机的配置。 2.实现交换机的生成树技术,在两个交换机上配置生成树协议,实现Vlan的负载均衡 3.对路由器进行设置,包括模拟器中路由器的…

案例分析篇07:数据库设计相关28个考点(23~28)(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

基于yolov5的草莓成熟度检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于yolov5的草莓成熟度检测系统,系统既能够实现图像检测,也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili (一)简介 基于yolov5的草莓成熟度系统是在pytorch框架下实现的,这是一个完整的项目…

力扣226.翻转二叉树(二叉树的先序遍历)

文章目录 题目描述思路复杂度Code 题目描述 思路 利用二叉树的先序遍历,每次递归遍历时将当前节点的左右子节点交换即可 复杂度 时间复杂度: O ( n ) O(n) O(n);其中 n n n为树节点的个数 空间复杂度: O ( h e i g h ) O(heigh) O(heigh);其…

虚位以待!OpenHarmony开发者激励计划持续招募中

虚位以待!OpenHarmony开发者激励计划持续招募中 自2022年5月7日,OpenHarmony开发者激励计划启动招募以来,就正式公开邀请广大开发者们参与 OpenHarmony 生态共建。随着社区的快速成长,目前已有累计超过7000名贡献者,产…

7个帮您恢复文件的Android 数据恢复推荐

您的 Android 设备上保存哪些类型的数据?如果您像大多数人一样,那么您可能已经列出了文档、照片、视频和音频文件。如果您使用智能手机或平板电脑的时间足够长,我们愿意打赌您对 Android 数据丢失有第一手经验。 对您来说幸运的是&#xff0…

目标检测数据集:手机顶盖焊缺陷检测数据集

✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的数据集会在该…

ubuntu 18.04安装教程(详细有效)

文章目录 一、下载ubuntu 18.04镜像二、安装ubuntu1. 点击下载好的Vmware Workstation,点击新建虚拟机,选择 “自定义(高级)”,之后下一步。2. 默认配置,不需要更改,点击下一步。3. 选择 “安装程序光盘映像文件(iso)(…