编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> 其它语言 -> 汇编语言之寻址方式 -> 正文阅读

[其它语言]汇编语言之寻址方式

与数据有关的寻址方式
下面以数据传送指令MOV为例来说明。其汇编格式为:MOV  目标, 源
1.立即寻址方式(immediate addressing)
操作数直接包含在指令中,紧跟在操作码之后的寻址方式称为立即寻址方式,把该操作数称为立即数。
MOV  AL, 6                       ;(AL)=6
MOV  AX, 3064H             ;(AX)=3064
2.寄存器寻址方式(register addressing)
操作数直接包含在寄存器中,由指令指定寄存器号的寻址方式。
MOV  BX, AX                    ;(BX)=(AX)
MOV  DI, 5678H              ;(DI)=5678H
除以上两种寻址方式外,以下各种寻址方式的操作数都在存储器中,其操作数称为存储器操作数。
由于80X86对内存采用分段管理,因此由以下寻址方式得到的只是有效地址(简写为EA-effective address,在IBM PC中就是操作数地址的偏移量部分)。
有效地址可以由以下四种成分组成:
位移量(displacement)是存放在指令中的一个8位、16位或32位的数,它是一个地址。
基址(base)是存放在基址寄存器中的内容。通常用来指向数据段中数组或字符串的首地址。
变址(index)是存放在变址寄存器中的内容。通常用来访问数组中的某个元素或字符串中的某个字符。
比例因子(scale factor)是80386以上CPU新增加的。其值可为1、2、4或8。寻址中,可用变址寄存器的内容乘以比例因子来取得变址值。
EA=基址+(变址x比例因子)+位移量
3.直接寻址方式(direct addressing)
操作数的有效地址直接包含在指令中的寻址方式。
有效地址存放在代码段的指令操作码之后,但操作数本身在存储器中,所以必须先求出操作数的物理地址。这种寻址方式常用于存取简单变量。
MOV  AL, [78H]
由于在汇编语言中用符号表示地址,所以指令“MOV  AL,VAR”中的源操作数寻址方式是直接寻址,有时也写做“MOV  AL,[VAR]”
4.寄存器间接寻址方式(register indirect addressing)
操作数的有效地址在基址寄存器BX、BP或变址寄存器SI、DI中,而操作数在存储器中的寻址方式。对于386以上CPU,允许使用任何32位通用寄存器。
MOV  AL, [BX]
5.寄存器相对寻址方式(register relative addressing)
也称为直接变址寻址方式。操作数的有效地址是一个基址(BX、BP)或变址(SI、DI)寄存器的内容和指令中给定的一个位移量(disp)之和。有效地址由2部分组成。对于386以上允许使用任何32位通用寄存器。
即:EA=(基址<或变址>寄存器)+disp
或:EA=(32位通用寄存器)+disp(386型号以上)
例:  MOV  AL, 8[BX] 或MOV  AL, [BX+8]
6.基址变址寻址方式(based indexed addressing)
操作数的有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。386以上允许使用变址部分除ESP以外的任何两个32位通用寄存器组合。缺省使用段寄存器的情况由基址寄存器决定。允许使用段超越前缀。
MOV AL,[BX][SI] 或MOV AL,[BX+SI]
7.相对基址变址寻址方式(relative based indexed addressing)
操作数的有效地址是一个基址和一个变址寄存器的内容和指令中给定的一个位移量之和。有效地址由三部分组成。80386以上允许使用变址部分除ESP以外的任何两个32位通用寄存器组合。缺省使用段寄存器的情况由基址寄存器决定。允许使用段超越前缀。
MOV AL,MASK[BX][SI] 或MOV AL,MASK[BX+SI]或MOV AL,[MASK+BX+SI]
8.比例变址寻址方式(scaled indexed addressing)
注意:80386以上的微处理器才提供。
EA=(基址寄存器)+(变址寄存器)×比例因子+disp
其优点在于:对于元素大小为2、4、8字节的数组,可以在变址寄存器中给出元素下标,而由寻址方式控制直接用比例因子把下标转换为变址值。
可以看出,它实际上是386以上CPU存储器操作数寻址方式的通用公式。
MOV AX, ARY[BX][4*SI]
与转移地址有关的寻址方式
这里讨论的寻址方式是用来确定转移及调用(CALL)指令的转向地址。下面以8086/8088的无条件转移指令为例来说明,格式为
JMP   目标
这里的目标有各种寻址方式。这些寻址方式可以被分为段内转移和段间转移两类。段内转移只影响指令指针IP值;段间转移既要影响IP值,也要影响代码段寄存器CS的值。
1.段内直接寻址方式(intrasegment direct addressing)
EA=(IP)+(8位或16位)disp
位移量disp是一个相对于指令指针的带符号数,EA就是要转向的本代码段内指令地址的偏移量。
若位移量是8位的,则称为短转移,格式JMP  SHORT  LAB
若位移量是16位的,则称为近转移,格式JMP  LAB 或JMP NEAR PTR LAB
2.段内间接寻址方式(intrasegment indirect addressing)
转向的有效地址在一个寄存器或内存单元中,该寄存器号或内存地址按上节介绍的与操作数有关的寻址方式(立即寻址方式除外)获得。
JMP  BX 
JMP  TABLE[BX] 
JMP WORD PTR [BX]                 ;其中WORD PTR [BX]表示BX指向一个字型内存单元
3.段间直接寻址方式(intersegment direct addressing)
指令中直接给出转向的4字节的偏移量和段基址。汇编格式为:JMP FAR PTR LAB。执行时偏移量送IP,段基址送CS。
4.段间间接寻址方式(intersegment indirect addressing)
用一个双字内存变量中的低16位取代IP值,高16位取代CS值,从而实现段间转移。例 : JMP DWORD PTR [BX];式中DWORD PTR [BX]表示BX指向一个双字变量。
  其它语言 最新文章
markdown入门杂记
Oracle数据库的安装
PHP 中 SESSION 反序列化机制
开发Maven插件
bat脚本:windows下一键启动zookeeper+kafka
3.指针
java分页三个类 PageBean ResponseUtil Str
c语言函数传参详解
自动扫描和暴力破解
汇编语言之寻址方式
上一篇文章      下一篇文章      查看所有文章
加:2017-07-06 22:05:35  更:2017-07-06 22:05:40 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 日历 万年历 2019年11日历
2019-11-13 1:11:27
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识