大二上汇编语言_第1页
大二上汇编语言_第2页
大二上汇编语言_第3页
大二上汇编语言_第4页
大二上汇编语言_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

寻址方式本章结构2.4与转移地址有关的寻址方式2.3与数据有关的寻址方式2.1操作数类型2.2有效地址和段超越2.5寻址方式总结2.1操作数类型2.1.1立即数2.1.2寄存器操作数2.1.3存储器操作数2.1操作数类型指令格式:操作码操作数1,操作数2 ;注释每种计算机提供给用户使用一组指令集及其相关语法规则称为该计算机的指令系统。一条指令提供的信息:完成什么操作、操作数或操作数地址是什么。操作码域:指定要完成的操作。2.1操作数类型

操作数2:源操作数,表示参与指令操作的一个对象;操作数1:目的操作数,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果。分号后的内容是对指令的解释。例: MOVAH,10 ;(AH)=10

LOGO2.1操作数类型

指令本身无需任何操作数或者所需操作数隐含约定的操作数;例:NOP、HLT

零操作数(地址)指令单操作数(地址)指令双操作数(地址)指令

指令中只有目的操作数或者隐含约定目的操作数;例:INCCX、PUSHAX

指令中指出参加操作的2个操作数的地址,操作后结果存入目标操作数中。例:MOVAX,[2000H]

2.1操作数类型2.1.1立即数8086的机器代码(MachineCode)格式2.1操作数类型2.1.1立即数操作码占1个或2个字节后面的各个字节指明操作数:“modregr/m”字节表明采用的寻址方式,“位移量”字节给出某些寻址方式需要的对基地址的偏移量,“立即数”字节给出立即寻址方式需要的数值本身。2.1操作数类型2.1.2寄存器操作数操作数的各个字段有多种组合,如表1所示r8——任意一个8位通用寄存器r16——任意一个16位通用寄存器reg——代表r8或r16seg——段寄存器CS/DS/ES/SSm8——一个8位存储器操作数单元m16——一个16位存储器操作数单元mem——代表m8或m16i8——一个8位立即数i16——一个16位立即数imm——代表i8或i16dst/src——目的操作数/源操作数表1.指令操作数的表达2.1操作数类型2.1.3存储器操作数存储器操作数的偏移地址可由以下三种成分组合偏移量+EA(有效地址)基址+変址=偏移量(位移量)(displacement)是存放在指令中的一个8位或16位的有符号数。基址是基址寄存器(BX,BP)中的内容。常用来指向数据段中数组或字符串的首地址。变址是变址寄存器(SI,DI)中的内容。常用来访问数组中的某个元素或字符串中的某个字符。EA可以由以上三个成分任意组合后提供。2.1操作数类型2.1.3存储器操作数如果操作数存放在存储区中,这样的操作数称为存储器操作数。

2.1操作数类型2.1.3存储器操作数计算机中操作数保存的地方1、指令中4、I/O接口寄存器中t2、CPU的寄存器中3、存储器中2.在指令中指定寄存器名.4.在访问I/O的专用指令中指定接口中寄存器的端口号。1.由程序员直接写在指令中3.两种情况(1)单个操作数可在指令中指定存放这个操作数的存储单元的地址.(2)以表格或数组的形式存放在存储器中的成组操作数需指定数据区的首(末)地址,作为地址指针

2.2有效地址和段超越当操作数存放在存储器中时,存储器存储单元的物理地址由两部分组成:偏移地址和段地址。在8086/8088的各种寻址方式中,寻找的存储单元所需的偏移地址成为有效地址(EA)。

存储器操作数寻址时,存储单元的物理地址的另一部分是段地址。

2.2有效地址和段超越若计算机工作在保护模式,段基址通过段寄存器中的段选择子从描述符中得到。当被访问的操作数的段基址不在约定使用的段寄存器中,而在其它的段寄存器中时,可以使用段跨越前缀指定其所在的段寄存器。段跨越前缀的表示形式:

ES:、CS:、SS:、DS:例:MOVAX,DS:[BP]MOVES:[BX],AX

2.2有效地址和段超越存储器操作数操作类型约定段寄存器允许指定的段寄存器偏移量1.指令CS无IP2.堆栈操作SS无SP3.普通变量DSES、SS、CSEA4.字符串指令的源串地址DSES、SS、CSSI5.字符串指令的目标串地址ES无DI6.BP作基址寄存器SSDS、ES、CSEA表3-1段基址和偏移量的约定情况

2.2有效地址和段超越(3)基址指针寄存器BP(2)通用寄存器BX(1)段寄存器CS、DS、ES和SS(4)変址寄存器SI和DI在实模式下提供有效地址需要使用的有关寄存器分别为:2.3

与数据有关的寻址方式在8088/8086指令系统中,与数据有关的寻址方式可以分为7种,用于确定操作数地址,从而找到操作数。.

操作数采取哪一种寻址方式,会影响机器运行的速度和效率。指令系统设计了多种操作数的来源,寻找操作数的过程就是操作数的寻址方式。

数据寻址方式以MOVDST,SRC为例讨论。2.3与数据有关的寻址方式2.3.2寄存器寻址方式2.3.4寄存器间接寻址方式2.3.6基址变址寻址方式2.3.3直接寻址方式2.3.7相对基址变址寻址方式2.3.5寄存器相对寻址方式2.3.1立即寻址方式2.3

与数据有关的寻址方式2.3.1立即寻址方式

操作:欲将一个常数送到寄存器中或者存储器中的一个单元;我们可以将操作数直接写在指令中,如MOVAH,10这种提供操作数的方式称为立即寻址方式,把该操作数称为立即数。

2.3

与数据有关的寻址方式2.3.1立即寻址方式注意:立即寻址方式只能出现在源操作数的位置。指令的源操作数长度应与目的操作数长度一致。2.3

与数据有关的寻址方式2.3.1立即寻址方式……ALOP06举例例1.

MOVAL,6 ;(AL)=6程序代码段所在存储器2.3

与数据有关的寻址方式2.3.1立即寻址方式举例例2.

MOVAX,1234H;(AX)=1234H……AXOP341212342.3

与数据有关的寻址方式2.3.2寄存器寻址方式操作数存放在寄存器中,由指令指定寄存器名的寻址方式。这种寻址方式不需要访问外部总线,存取速度较高。可用的寄存器:通用寄存器或段寄存器(CS不能用于DST)。对16位操作数,可以用AX,BX,CX,DX,SI,DI,SP和BP;对8位操作数,可以用AL,AH,BL,BH,CL,CH,DL,DH;对于386及其后继机型可以用EAX,EBX,ECX,EDX,ESI,EDI,ESP和EBP。2.3

与数据有关的寻址方式2.3.2寄存器寻址方式举例例3.

MOVBX,AX ;(BX)(AX)

;AX中的内容不变2.3

与数据有关的寻址方式2.3.2寄存器寻址方式举例例5.

MOVAL,78H ;(AL)78H例6.

MOVEAX,78H;(EAX)

78H2.3

与数据有关的寻址方式2.3.2寄存器寻址方式上述指令中的DST均为寄存器寻址方式。存放在寄存器中的操作数称为寄存器操作数。双操作数指令中至少要有一个操作数使用寄存器寻址方式2.3

与数据有关的寻址方式2.3.3直接寻址方式操作数的有效地址只包含位移量一种成分,位移量的值即操作数的有效地址。可以将该变量的有效地址直接写在指令中

---直接寻址方式。用途:存取单个变量。通用格式:操作码DST,EA2.3

与数据有关的寻址方式2.3.3直接寻址方式执行结果如图3-2(a)所示。举例例7.

MOVAX,[0078H];缺省段寄存器为DS。其功能与右面两条指令的功能等价:

MOVAX,[0078H]MOVAL,[0078H]MOVAH,[0079H]2.3

与数据有关的寻址方式2.3.3直接寻址方式举例例7.

]50303007830079AHAL3050(DS)图3-2(a)MOVAX,[0078H]2.3

与数据有关的寻址方式2.3.3直接寻址方式举例例7.

(DS)=3000H物理地址PA=16d(DS)+EA=163000HH=30078H字地址30078H中的内容:(30078H)=3050H执行结果是(AX)=3050H2.3

与数据有关的寻址方式2.3.3直接寻址方式非默认段的情况如果操作数在附加段中,则应指定段跨越前缀如下:

MOVAX,ES:VAR或MOVAL,ES:[0078H]实际上只有在DEBUG环境下,才有[0078H]这样的表示。在汇编语言源程序中直接寻址方式都是用符号表示的。2.3

与数据有关的寻址方式2.3.4寄存器间接寻址方式操作数在存储器中,而该操作数的有效地址放在BX、BP和SI、DI四个寄存器中提供给CPU的寻址方式。对于386以上CPU,这种寻址方式允许使用任何32位通用寄存器。若指令中使用BX、SI、DI,则默认与DS段寄存器配合;若使用BP,则默认与SS配合。BX、BP和SI、DI均允许使用段跨越。2.3

与数据有关的寻址方式2.3.4寄存器间接寻址方式举例例9.

MOVAX,[BX] ;AX(DS:[BX])注意它与寄存器寻址方式在形式上的区别:MOVAX,BX ;(AX)(BX)

源操作数的物理地址为:PA=(DS)×10H+(BX)2.3

与数据有关的寻址方式2.3.4寄存器间接寻址方式举例例9.若(DS)=3000H,(BX)=78H,(30078H)=12H则:PA=3000H×10H+78H=30078H该指令的执行结果是(AL)=(30078H)=12H

2.3

与数据有关的寻址方式2.3.4寄存器间接寻址方式举例例10.

MOVAX,[BP];AX(SS:[BP])若(SS)=2000H,(BP)=80H,则PA=(SS)×10H+(BP)=20080H

若(20080H)=5612H,则该指令的执行结果是(AX)=5612H。利用这种寻址方式再配合修改寄存器内容的指令可以方便地处理一维数组,如图3-3所示。2.3

与数据有关的寻址方式2.3.4寄存器间接寻址方式举例图3-3寄存器间接寻址方式执行情况DSBXAL+X3XiX2X1X0X9寄存器间接寻址方式处理一维数组X[10]2.3

与数据有关的寻址方式2.3.5寄存器相对寻址方式操作数的EA是一个基址(BX、BP)或变址寄存器(SI、DI)的内容和指令中给定的一个位移量(disp)之和(见教材图3.1(5))。EA=(基址<或变址>寄存器)+disp位移量可以是一个字节或一个字的带符号数。与段寄存器约定配合与寄存器间接寻址约定相同

]2.3

与数据有关的寻址方式2.3.5寄存器相对寻址方式举例例11.

MOVAL,TABLE[BX]或MOVAL,[BX+TABLE]

其中TABLE为位移量的符号表示。 指令执行结果是:

AL←

(DS:[BX+TABLE]) 使用这种寻址方式可以访问一维数组,其中TABLE是数组首地址的偏移量,寄存器中存放数组元素的下标乘以元素的长度的积(一个元素占用的字节数),下标从0开始计数。2.3

与数据有关的寻址方式2.3.5寄存器相对寻址方式举例例12.MOVAX,8[BX]

可以表示为:MOVAX,[BX+8]

若(DS)=3000H,(BX)=70H

(30078H)=1234H

则PA=10H×(DS)+(BX)+DISP

=30078H

该指令的执行结果是(AX)=1234H。 其中8[BX]为寄存器相对寻址方式,该指令执行情况如图3-4所示。2.3

与数据有关的寻址方式2.3.5寄存器相对寻址方式举例DSBX+AXMOV

AX,[BX+8]+

34H12H8寄存器间接寻址方式处理一维数组图3-4寄存器相对寻址执行情况2.3

与数据有关的寻址方式2.3.6基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。缺省使用段寄存器的情况由基址寄存器决定。允许使用段跨越前缀。使用段跨越前缀时的格式为:MOVAX,ES:[BX][SI]BXBPSIDIEA=+2.3

与数据有关的寻址方式2.3.6基址变址寻址方式基址

BXBPEA=+变址

SIDI基址变址寻址方式组合基址EAXEBXECXEDXESPEBPESIEDIEA=+变址EAXEBXECXEDXEBPESIEDI80386以上32位基址变址寻址方式组合图3-52.3

与数据有关的寻址方式2.3.6基址变址寻址方式举例例13.

MOVAL,[BX][SI] ;(DS:[BX+SI])→AL该指令可以表示为:

MOVAL,[BX+SI]

使用该寻址方式可以访问一维数组。用BX存放数组起始地址的偏移量,SI存放数组元素的下标乘以元素的长度,下标从0开始计数。则数组中任一元素的有效地址=(BX)+(SI)。因为数组的首地址存放在寄存器中,因此可以访问存储器中任意已知地址指针的数组.执行情况如图3-6所示。2.3

与数据有关的寻址方式2.3.6基址变址寻址方式图3-6基址变址寻址方式执行情况DSBX+AL+SIXXBX存放数组起始地址的偏移量,SI存放数组元素的下标乘以元素的长度,下标从0开始计数。基址变址寻址方式访问一维数组2.3

与数据有关的寻址方式2.3.7相对基址变址寻址方式有效地址分解成三个部分提供:

EA

+DISP基址寄存器変址寄存器DISP可以是一个字节、一个字的带符号数。缺省使用段寄存器的情况由基址寄存器决定。允许使用段跨越前缀。+=2.3

与数据有关的寻址方式2.3.7相对基址変址寻址方式举例例14.

MOVAL,ARY[BX][SI];(DS:[BX+SI+ARY])→AL可表示为:

MOVAL,ARY[BX+SI]

或MOVAL,[BX+SI+ARY]执行情况如图3-8所示。

2.3

与数据有关的寻址方式2.3.7相对基址変址寻址方式举例例:相对基址变址寻址方式访问文件记录存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,基址寄存器指向第i个记录,变址寄存器则指向该记录中的第j个元素。(基址寄存器)×记录的长度作为记录指针(变址寄存器)×记录中元素的长度作为元素指针则(disp+(基址寄存器)+(变址寄存器))为文件中第Ai,j个元素的指针。2.3

与数据有关的寻址方式2.3.7相对基址変址寻址方式设数组在内存中以行的形式存放。

ARY为数组起始地址的偏移量,基址寄存器为某行首与数组起始地址的距离,即行下标×一行占用的字节数,变址寄存器为某列与所在行首的距离即列下标×元素长度,若保持基址寄存器不变而变址寄存器改变,则可以访问同一行的所有元素;若保持变址寄存器不变而基址寄存器改变,则可以访问同一列的所有元素。相对基址变址寻址方式访问二维数组2.3

与数据有关的寻址方式2.3.7相对基址変址寻址方式相对基址变址寻址方式访问二维数组图示图3-8相对基址变址寻址方式DSBX+AL+SIMOVAL,ARY[BX][SI]+XX2.4

与转移地址有关的寻址方式2.4.1段内直接寻址2.4.2段内间接寻址2.4.4段间间接寻址2.4.3段间直接寻址2.4

与转移地址有关的寻址方式本节讨论的寻址方式是用来确定转移及调用指令的转向地址。既根据目标地址所在的位置,用前面介绍的寻址方式将转移目标地址的地址提供给CPU。下面以8086/8088的无条件转移指令为例来说明。无条件转移指令格式:

JMP目标

功能:无条件转移到目标地址处执行指令。2.4

与转移地址有关的寻址方式1、转移的目标地址有两类2、提供目标地址的方法有两类2.转移目标地址在本逻辑段外为段间转移—改变IP和CS的值实现。.

1.转移目标地址在本逻辑段内为段内转移—改变指令指针IP的值实现;1.直接寻址—目标地址直接写在指令中2.间接寻址—目标地址放在寄存器/存储器中与转移地址有关的寻址方式的功能2.4

与转移地址有关的寻址方式2.4.1段内直接寻址格式:JMP标号(符号地址)其中DISP=转移目标有效地址–当前(IP)CPU通过把指令中给出的disp加到IP中得到目标地址的EA,送到(IP)。从而使IP指向目标指令地址,实现段内转移。

8位16位

(IP)EA=(IP)+DISP2.4

与转移地址有关的寻址方式2.4.1段内直接寻址段转移与近转移)若位移量为16位,称为近转移,可以实现距离当前(IP)为±32K字节范围内的转移,格式:

JMPLAB或JMPNEARPTRLAB若位移量为8位,称为短转移,可以实现距离当前(IP)为[+127,-128]字节范围内的转移,格式:

JMPSHORTLAB2.4

与转移地址有关的寻址方式2.4.2段内间接寻址方式程序转向的有效地址存放在一个寄存器或内存单元中,该寄存器号或内存地址按前面介绍的与操作数有关的寻址方式(立即寻址方式除外)获得。取到其中的有效地址送给IP,实现转移。指令格式及举例见表3-1。

2.4

与转移地址有关的寻址方式2.4.2段内间接寻址方式格式举例注释JMP通用寄存器JMPBX16位转向地址在BX中JMP内存单元16位转向地址在VAR字型内存变量中16位转向地址在BX所指向的内存变量中JMPVARJMPWORDPTR[BX]表3-1段内间接寻址方式2.4

与转移地址有关的寻址方式2.4.2段内间接寻址方式举例设:(DS)=2000H,(BX)=0300H

(IP)=0100H,(20300H)=0500H例1.JMPBX ;(IP)=(BX)=0300H例2.JMPW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论