当前位置:首页 > 教育综合 > 正文

DS=215FH时,某操作数的物理地址是215FAH,当DS=18DEH时,该操作数的物理地址是多少

老掉牙的汇编语言观念问题(定址法,又称寻址法)

  • 立即寻址

  立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操作数字段,不能用于目的操作数字段。

MOVAL,5

  

  • 直接寻址

  在IBM PC机中将操作数的偏移地址称为有效地址EA。在直接寻址方式中有效地址EA就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数.

如操作数在数据段中,则物理地址=16d×(DS)十EA。1BMPC机中允许数据存放在数据段以外的其他段中,此时应在指令中指定段跨越前缀,在计算物理地址时应使用指定的段寄存器。

movAX,[2000H]
(DS)=3000H,地址32000H中的值为3050H则,执行结果为:(AX)=3050H
因为实际movAX中的内容为16d*(Ds)+2000H=32000H

  
在汇编语言指令中,可以用符号地址代替数值地址,如:

MOVAX,VALUE

  此时VAIUE为存放操作数单元的符号地址。如写成

MOVAX,[VALUE]

  也是可以的.两者是等效的。如果VALUE在附加段中,则应该指定段跨越前缀如下;

MOVAX,ES:VALUE
或MOVAX,ES:[VALUE]

  直接寻址方式适用于处理单个变量,例如需要处理某个存放在存储器里的变量,可用直接寻址方式,将该变量先取到一个寄存器中,然后在做处理。
IBM PC机规定:除在双操作数中,除立即数外,必须有一个操作数使用寄存器方式。这也是一个常量常常送到寄存器去的原因。

  

  • 寄存器间接址
    操作数的有效地址在基址寄存器BX、BP或变垃寄存器SI、DI中,而操作数则在存储器中,如下图所示。

    a.如果指令中指定的寄存器是BX、SI、DI,则操作数在数据段(DS)中,所以用DS寄存器的内容作为段地址,即操作数的物理地址为:
    物理地址=16d×(DS)十(BX)
    或 物理地址;16 d×(DS)十(SI)
    或 物理地址=16d×(DS)十(DI)
    b.如指令中指定BP寄存器,则操作数在堆栈段(SS)中,段地址在SS中,所以操作数的物理地址为:
    物理地址=16d×(SS)十(SP)

  MOVAX,[BX]

  如果 (DS)=2000H , (BX)=1000H 则
物理地址=16d×(DS)十(BX) = 20000H+1000H = 21000H
21000H地址里的内容为 50A0H则 执行结果为:(AX)=50A0H
c.指令中也可指定段跨越前缀来取得其他段中的数据。如;

MOVAX,ES:[BX]

  这种寻址方式可以用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出表格中的下一项。

  

  • 寄存器相对寻址方式

  操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量之和。即

  |(BX)
  EA=|(BP)+8位或者16位的位移量
  |(SI)
  |(DI)

  

  同寄存器寻址一样 BX BP DI 若没有段跨越前缀

  物理地址为=16d×(DS) +位移量 + *SP

  物理地址为=16d×(SS)十(SP) + 位移量 + *

  

  举个例子:

MOVAX,COUNT[SI](也可表示为MOvAX,[COUKT十SI]

  其中,COUNT 为16位位移量的符号地址。
如果(DS)=3000H,(SI)=2000H COUNT=3000H
则物理地址 = 30000十2000十3000 =35000H

  

  • 基址变址寻址方式

  操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。两个寄存器均由指令指定。如果基址寄存器为BX,段寄存器使用DS;如基址寄存器为BP时,段寄存器则用SS。因此,物理地址为:

= 16D * DS + (BX) + SI(或者DI)
= 16D * SS + (BP) + SI(或者DI)

  

  • 相对基址变址寻址方式
    操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之
    和。同样,当基址寄存器为BX时,使用DS段寄存器;而当基址寄存器为BP时,则使用SS为段寄存器。因此物理地址为:

  = 16d * DS + BX + SI + 位移量(8位或16位)

  = 16d * ss + BP + SI + 位移量(8位或16位)

MOVAX,MASK[BX][SI]
(也可以写成M0VAX,MASK[DX十SI]
或MoVAX.[MASK十BX十SI])

如 (DS)=3000H,(BX)=2000H、(SI)=l000H,MASK=0250H,
则 物理地址=16d×(DS)十(BX)十(SI)十MASK
=30000十2000十1000十0250
=33250H

阅读下列指令,指出下列指令中的源操作数的寻址方式,并计算该操作数 的物理地址(如果需要)

(1)立即寻址 (2)变址寻址 (DS) * 10H + DATA + DI = 2105AH (3)基址加变址寻址 (DS) * 10H + (DI) + (BX) = 2110AH (4)寄存器寻址

寄存器寻址和寄存器间接寻址的区别

一、主体不同

1、寄存器寻址:是指操作数在寄存器中,由指令操作码中的rrr三位的值和PSW中RS1及RS0的状态,选中某个工作寄存器区的某个寄存器,然后进行相应的指令操作。

2、寄存器间接寻址:将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数。

二、功能不同

1、寄存器寻址:指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。

2、寄存器间接寻址:寄存器内存放的是操作数的地址,而不是操作数本身,即操作数是通过寄存器间接得到的。


三、特点不同

1、寄存器寻址:在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。

2、寄存器间接寻址:需要以寄存器符号的形式来表示,且在寄存器名称前面加上间接寻址符号“@”。例如指令MOV A,@R0就使用了寄存器间接寻址方式。


参考资料来源:百度百科-寄存器寻址

参考资料来源:百度百科-寄存器间接寻址

汇编语言mov 【ax+2】,bx的目的操作数地址

  • 没有见过这种写法,

  • 看了一下5种寻址方式也没有见过这种写法,

  • 用编译器变了一下,也是病句

  所以楼主你的mov【ax+2】,bx是错的哦

  下面是寻址方式的简介,楼主可以参考一下哦

  • PS:若有不明白的地方,可以追问

  寻址方式的简介

  段地址(SA)和偏移地址(EA)

  1.直接寻址

  直接寻址方式是指操作数的偏移地址在指令中直接给出,例如

  MOVAX,[1234H]

  EA=1234H,SA=DS

  2.寄存器间接寻址

  寄存器间接寻址是指操作数的偏移地址在BX,BP,SI,DI四个寄存 器之一中

  (1)当以BX,SI或DI寄存器进行间接寻址时,操作数的物理地址有DS中的段地址与BX,SI或DI中的偏移地址构成

  (2)当以BP寄存器进行间接寻址时,操作数的物理i地址有SS中的段地址与BP中的偏移地址构成

  MOVAX,[BX,SI或DI]

  EA=BX,SI或DI,SA=DS

  MOVAX,[BP]EA=BP,SA=SS

  3.寄存器相对寻址

  寄存器相对寻址是指操作数的偏移地址是BX,BP,SI,DI之一的值和一个8位或16位偏移地址之和

  (1)当以BX,SI或DI寄存器进行间接寻址时,操作数的物理地址有DS中的段地址与BX,SI或DI中的偏移地址构成

  (2)当以BP寄存器进行间接寻址时,操作数的物理i地址有SS中的段地址与BP中的偏移地址构成

  MOVAX,[BP+100H]EA=BP+100H,SA=SS

  MOVAX,[BX,SI或DI+100H]EA=BX,SI或DI+100H,SA=DS

  [BX+100H]等价于200H[SI]

  4.基址变址寻址

  基址变址寻址是指操作数的偏移地址是一个基址寄存器BX,BP的值和一个变址寄存器SI,DI的值之和

  (1)当以BX作为基址寄存器时,操作数物理地址由DS中的段地址与SI或DI中的偏移地址构成

  (2)当以BP作为基址寄存器是,操作数物理地址由SS中的段地址与SI或DI中的偏移地址构成

  MOVAX,[BX+DI或SI]EA=BX+SI或DI,SA=DS

  MOVAX,[BP+DI或SI]EA=BP+SI或DI,SA=SS

  [BX+SI]等价于[BX]+[SI]

  5.相对基址变址寻址

  相对基址变址寻址是指操作数的偏移地址是一个基址寄存器BX,BP的值加上一个变址基础器SI,DI的值,再加上指令中的一个8位,16位偏移量之和

  (1)当以BX作为基址寄存器时,操作数物理地址由DS中的段地址与SI或DI中的偏移地址构成

  (2)当以BP作为基址寄存器是,操作数物理地址由SS中的段地址与SI或DI中的偏移地址构成

  MOVAX,[BX+100H+DI或SI] EA=BX+DI或SI+100H,SA=DS

  MOVAX,[BP+100H+DI或SI] EA=BP+DI或SI+100H,SA=SS

  [BX+SI+100H]等价于100H[BX+SI]等价于[BX]+[SI]+100H

设DS=8225H,DI=3942H,指令INC BYTE PTR[DI]操作数的物理地址是( ) A.86192H B.85B92H C.41645H D.41B45H

设DS=8225H,DI=3942H,指令INC BYTE PTR[DI] 操作数的物理地址是=(DS)×16+有效地址=82250+3942H=85B92H INC BYTE PTR[DI]这个指令的含义:将该物理地址单元中的操作数加1,结果还保存在该单元中。 答案: 为B.85B92H
展开全文阅读