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

一、操作数的寻址方式

立即寻址方式

格式: 操作码 数字表达式(将数据送入寄存器中)
源操作数可以是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结构,出于好奇探索了一下这个算法的原理,无奈中文资料很少,只能直接去阅读论文以及一些英文资料,总结成此文…

微机原理——总线和时序

前提 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) 参数一:原图图像对象名称 参数二:模板图像对象名称 参数三:差别程度的计算方法(六选一推荐使用带归一化的) 模板匹配和卷积原理很像,模板从原图像上从原点开始滑动,计…

用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…

17-直方图

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

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-傅里叶变化

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

Opencv——DFT变换(实现两个Mat的卷积以及显示Mat的频域图像)

DFT原理:(单变量离散傅里叶变换) 数学基础: 任何一个函数都可以转换成无数个正弦和余弦函数的和的形式。 通常观察傅里叶变换后的频域函数可以获得两个重要的信息:幅频曲线和相频曲线。 在数字图像处理中的作用&#…

基于(Python下的OpenCV)图像处理的喷墨墨滴形状规范检测

通过图像处理,分析数码印花的喷头所喷出来的墨滴形状,与标准墨滴形状对比分析,来判断墨水及其喷头设备的状态,由两部分构成 PS:获取墨滴形状照片和标准墨滴形状照片都是手绘的,将就的看吧,主要…

微机原理——指令系统——传送类指令(MOV、LEA、LDS、LES、LAHF、SAHF、XCHG、XLAT、PUSH、POP、PUSHF、POPF)

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 【没事儿可以到我主页看看】https://blog.csdn.net/qq_42604176 传送类指令1&…

mysql 任务计划 /etc/cron.d_Linux /etc/cron.d增加定时任务

一般情况下我们添加计划任务时,都是直接修改/etc/crontab。但是,不建议这样做,/etc/cron.d目录就是为了分项目设置计划任务而创建的。例如,增加一项定时的备份任务,我们可以这样处理:在/etc/cron.d目录下新…

19-Harris角点检测

角点检测顾名思义,就是对类似顶点的检测,与边缘有所区别 边缘可能在某一方向上变化不是特别明显,但角点在任何方向上变换都很明显 cv2.cornerHarris(img,blockSize,ksize,k) cv2.cornerHarris(gray,2,3,0.04) 参数一:img&#xff…

微机原理——指令系统——算数运算指令(ADD、ADC、SUB、SBB、INC、DEC、NEG、CMP、MUL、IMUL、DIV、IDIV、CBW、CWD、BCD调整)

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 算数运算指令1、加减法指令ADD、ADC 、SUB 、SBB 和增量减量指令INC、DEC、NEGADD…

20-SIFT算法

import cv2 import numpy as np from matplotlib import pyplot as pltdef show_photo(name,picture):#图像显示函数cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img cv2.imread(E:\Jupyter_workspace\study\data/cfx.png) gray cv2.cvtColor(img,cv2.COL…

mysql 迁移 nosql_从关系型Mysql到Nosql HBase的迁移实践

2013年11月22-23日,作为国内唯一专注于hadoop技术与应用分享的大规模行业盛会,2013 Hadoop中国技术峰会(China Hadoop Summit 2013)于北京福朋喜来登集团酒店隆重举行。来自国内外各行业领域的近千名CIO、CTO、架构师、IT经理、咨询顾问、工程师、Hadoop…