微机原理——寻址方式总结

一、操作数的寻址方式

立即寻址方式

格式: 操作码 数字表达式(将数据送入寄存器中)
源操作数可以是8位也可以是16位。

MOV AH, F5H (字节操作) F5H称为立即数(8位操作数)
MOV AL, 8AH (字节操作) 8AH称为立即数

直接寻址方式

指令格式: 操作码 寄存器(16位) , 地址表达式(将地址的内容送入寄存器中)

MOV AX,ES:[2000H] 将ES:2000H单元内容送入AX。
MOV AX,LABLE 或 MOV AX,[LABEL]将标号为LABLE(存放操作数单元的符号地址) ,即DS:LABLE中的内容送入AX。LABLE要在段定义中指明。
此时,字操作和字符操作的等效:
MOV AX,(2000H);只需要写低字节地址
MOV AL,(2000H); MOV AH,(2001H)

寄存器寻址方式

格式:操作码 寄存器,寄存器(将寄存器中的内容送入另一个寄存器)
可操作性的寄存器:

1)8 位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL
2)16 位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP
3)4个段寄存器seg: CS、DS、SS、ES

注意点

1、目的和源寄存器的 位数必须相同,不同 位数寄存器之间不能传送数据处理 如: MOV BX,AH
如果要将数据送入段寄存器(CS、DS、ES、SS),必须先将这个数送入一个非段寄存器,然后在送到段寄存器

寄存器间接寻址方式

格式:操作码 寄存器,(寄存器) (BX决定的存储单元的内容送到AX寄存器 )

MOV AX, [BX] ;AX←DS:[BX]

注意点

对于BX、SI、DI,默认的段地址在DS段寄存器
对于BP,默认的段地址在SS段寄存器
物理地址计算方法:
物理地址 = (DS)×16 + (BX)或(SI)或(DI)
物理地址 = (SS)× 16 + (BP)

寄存器相对寻址方式

格式:操作码 寄存器,相对值DISP+基址或变址寄存器

MOV AX, [SI+06H] ;AX←DS:[SI+06H]
MOV AX, 06H[SI] ;AX←DS:[SI+06H]

地址计算
地址计算
DISP可以是16位,也可以是8位,DISP是一个数值的代号!

基址变址寻址方式

格式: 操作码 寄存器,(基址寄存器)+(变址寄存器)

MOV AX, [BX+SI] ;AX←DS:[BX+SI]
MOV AX, [BX][SI] ;AX←DS:[BX+SI]
有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:
有效地址=BX/BP+SI/DI
段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变

相对基址变址寻址方式

格式:操作码 寄存器,DISP+(基址寄存器)+(变址寄存器)
有效地址=BX/BP+SI/DI+8/16位偏移量

MOV AX, [BX+DI+6] ;AX←DS:[BX+DI+6]
MOV AX, 6[BX+DI] ; MOV AX, 6[BX][DI]

段超越

当操作数在内存单元时,系统根据隐含约定,自动将寄存器DS或SS的值作为段地址。然而,当操作数段地址不在隐含的段寄存器时,可以使用段超越前缀取代其隐含约定。
形式
BP默认SS,BX默认DS,通过段超越可以进行修改。
注意:不是所有的段都可做段超越前缀

例题讲解

指出下列指令错误:
1)MOV AH,BX; //一个8位,一个16位,不匹配
2)MOV [SI],[BI]; //src和dst都是间接寻址,然而操作数只能有一个是这样的形式
3)MOV AX,[SI][DI]; //[BX/BP] [SI/D] 显然不符合
4)MOV AX[BX][BP]; //和3同样问题
5) MOV [BX],ES:AX; //正确的形式应该是 MOV [BX],ES:[AX] ;但是就算这样也是错的,错误原因和2一样
6)MOV CS,AX; //CS不能通过赋值改变,只能通过跳转指令
7)MOV DS,2000H; //正确应该是MOV AX,2000H; MOV DS,AX;

二、转移地址的寻址方式

段内相对寻址

JMP DISP (disp:8位或16位的地址偏移量)

此时,转移地址应该是代码段寄存器CS内容加上指令指针IP内容,再加上相对地址位移量DISP。
运转方式

段内间接寻址

JMP CX; CX的内容为转移地址的段内偏移量
JMP WORD PTR CX

WORD PTR是寻址一个字的标记,指令中必须加上
CX的内容为新的IP值(这个与相对寻址区别开),程序转移到新的入口处 ,CX值不能超出该段的区域
运算过程

段间直接寻址

JMP FAR PTR ADD1;
ADD1为转移地址的标号
FAR表示转移距离大于±32K,或是不同段之间转移。

指令操作码后的第二个字将赋予代码段寄存器CS第一个字将赋予指令指针寄存器IP。最后CS内容和IP内容相加则得转移地址。
运算过程

段间间接寻址

JMP DWORD PTR[BP][DI]
段间间接寻址只适用于存贮器寻址方式
确定转移地址需要32位信息 相当于两个字,所以用DWORD,段间间接寻址只适用于存贮器寻址方式

这种寻址方式可计算出存放转移地址的存贮单元的首地址,与此相邻的4个单元中,前两个单元存放16位的段内偏移地址,而后两单元存放的是16位的段地址
运算过程

转移地址寻址方式的小结

通过对运转流程的观察,可以确定,通过JMP操作只会对代码段产生影响。
使代码跳转到我们所指定的代码地址。

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

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

相关文章

15-轮廓检测

边缘是零零散散的,而轮廓是一个整体 cv2.findContours(img,mode,method) img:输入图像对象名称 mode:轮廓检索模式 RETR_EXTERNAL:只检索最外面的轮廓 RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中…

抛硬币仿真实验java_探索HyperLogLog算法(含Java实现)

引言HyperLogLog算法经常在数据库中被用来统计某一字段的Distinct Value(下文简称DV),比如Redis的HyperLogLog结构,出于好奇探索了一下这个算法的原理,无奈中文资料很少,只能直接去阅读论文以及一些英文资料,总结成此文…

kotlin键值对数组_Kotlin程序以升序对数组进行排序

kotlin键值对数组Given an array, we have to sort its elements in ascending order. 给定一个数组,我们必须按升序对其元素进行排序。 Example: 例: Input:arr [10, 20, 5, 2, 30]Output:sorted array (Ascending Order): [2, 5, 10, 20, 30]在Kotl…

微机原理——总线和时序

前提 8088有两个组态: 最大组态和最小组态,通过引脚MN/MX*的电平决定组态。(*表示低电平有效) 两种组态没有本质区别。 8088的引脚: 引脚可分为下面几种类别: 1、数据和地址引脚 2、读写控制引脚 3、中断…

PHP站内搜索:多关键字查找,加亮显示

1、SQL语句中的模糊查找LIKE条件一般用在指定搜索某字段的时候, 通过"% _" 通配符的作用实现模糊查找功能,通配符可以在前面也可以在后面或前后都有。搜索以PHP100开头: SELECT * FROM teble WHERE title LIKE PHP100% 搜索以PHP100结束&…

16-模板匹配

cv2.matchTemplate(img,template,cv2.TM_SQDIFF) 参数一:原图图像对象名称 参数二:模板图像对象名称 参数三:差别程度的计算方法(六选一推荐使用带归一化的) 模板匹配和卷积原理很像,模板从原图像上从原点开始滑动,计…

对MySQL性能影响关系紧密的五大配置参数

以下的文章主要是对MySQL性能影响关系紧密的五大配置参数的介绍,我前几天在相关网站看见对MySQL性能影响关系紧密的五大配置参数的资料,觉得挺好,就拿出来供大家分享,望你能有所收获。(一)连接 连接通常来自Web服务器,…

JAVA安装作用_jdk安装配置及其作用

2.安装好了就是去配置路径了,我的是win7系统,步骤如下:桌面上的计算机右击-》高级系统设置—》环境变量-》系统变量-》新建一共要新建三个变量JAVA_HOME,PATH和CLASSPATH1>JAVA_HOME:(这么写为了方便以后可能改动jdk的安装路径&#xff0c…

用C#开发Windows应用程序

To develop windows application, we need to using studio and follow some steps: 要开发Windows应用程序 ,我们需要使用studio并遵循一些步骤: Step 1) First of all we launch visual studio. 步骤1)首先,我们启动Visual Studio。 Ste…

图像分割——基于二维灰度直方图的阈值处理

前言 像素灰度值仅仅反映了像素灰度级的幅值大小,并没有反映出像素与邻域的空间相关信息。 二维灰度直方图的概念 二维灰度直方图:像素的灰度值分布和邻域的平均灰度值分布构成的二维直方图 二维直方图的值N(i,j) 。其中,if(x,y) 图像(x,y…

多维角度聊聊结对编程

在敏捷软件开发的各种实践中,结对编程(Pair Programming,下文简称Pair)是特别有争议的。Pair有一个特点,那就是还没有进行过任何Pair实践前,你很可能对它已经有了“喜欢” 或者是“讨厌”的印象。如果有人问…

17-直方图

直方图 何为直方图?没那么高大上,其实就是二维统计图。每个照片都是有像素点所组成,当然也是[0,255],直方图就是统计每个值所对应的像素点有几个。 直方图横坐标表示0-255这些像素点值;纵坐标表示对应像素点值的个数有…

java求水电费_java水电费管理系统

每天记录学习,每天会有好心情。*^_^*今天和一个朋友共同完成了一个基于web的java水电费管理系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架。我这个朋友知识有限,只会这个框架,哈哈,都是为了方便他。和往常一样…

zemax微透镜阵列示例_阵列反向! Ruby中的示例方法

zemax微透镜阵列示例阵列反向! 方法 (Array reverse! Method) In this article, we will study about Array.reverse! method. You all must be thinking the method must be doing something related to reversing certain elements as we have done in the case o…

Opencv实战【1】人脸检测并对ROI区域进行部分处理(变身乔碧萝!!!)

步骤: 1、利用Opencv自带的分类器检测人脸 预备知识:Haar特征分类器 Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。 Haar特征分类器存放地址: (找自己的安装…

【黑马甄选离线数仓day10_会员主题域开发_DWS和ADS层】

day10_会员主题域开发 会员主题_DWS和ADS层 DWS层开发 门店会员分类天表: 维度指标: 指标:新增注册会员数、累计注册会员数、新增消费会员数、累计消费会员数、新增复购会员数、累计复购会员数、活跃会员数、沉睡会员数、会员消费金额 维度: 时间维度&#xff08…

iPad和iPhone的app图标尺寸、用途、设置方法

下面是在iPhone专用程序、iPad专用程序和通用程序中使用图标文件的指导,由译言网翻译自苹果官方文档。原文 http://article.yeeyan.org/view/395/100567 注意:图标是你的程序包所必需的组成部分。如果你没有提供程 序所需的各种尺寸的图标,系…

18-傅里叶变化

以时间为参照就是时域分析,当然时间是动态变化的 而傅里叶变换是以频域为基准的,不用关心动态变化,只关心做了多少次而已,次数,频率 傅里叶说过,任何一个周期函数都可以用正弦函数堆叠起来形成。强吧&#…

java中访问修饰符_Java中的非访问修饰符是什么?

java中访问修饰符Java非访问修饰符 (Java non access modifiers) We have 7 non-access modifiers in Java. The name of these non-access modifiers are given below, Java中有7个非访问修饰符 。 这些非访问修饰符的名称如下所示: native 本机 synchronized 已同…

mui实现分享功能_MUI 分享功能(微信、QQ 、朋友圈)

配置文件:manifest.jsonplus ->plugins 下边"share": {/*配置应用使用分享功能,参考http://ask.dcloud.net.cn/article/27*/"qq": {"appid": "",/*腾讯QQ开放平台申请应用的AppID值*/"description"…