汇编第三章复习之七种寻址

发布时间 2023-04-05 15:17:58作者: 平凡的柳先生

段寄存器:CS、DS、ES、SS

1.指令

指令由操作数码和操作数两部分构成

操作码:说明计算机要执行的操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分。      

操作数:是指令执行的参与者,即各种操作的对象。也就是指令执行操作过程中需要的操作数。

2、寻址

 

1、立即寻址 MOV AX , 3069H

 

 操作数直接存放在指令中,紧跟在操作码之后     

例如:

 

 

     MOV AX,3064H

 

 

2、寄存器寻址 MOV AL , B 

操作数存储在寄存器中,指令中指定寄存器号,这种寻址方式称为寄存器寻址方式。

 

 

 例如 :

    AX=3064H BX=1024H

    MOV AX,BX

得到 AX=1024H BX=1024H 

注意事项:

1、 指令中源操作数和目的操作数都是寄存器时,必须采用同样字长的寄存器,否则汇编时会出错;(源操作数指的是不随指令变化的操作数)

2、两个操作数不能同为段寄存器;

3、目的操作数不能为代码段寄存器(CS)

 

以下各种寻址方式,操作数都在除代码段之外的存储区中,先介绍变址

位移量(displacement):存放在指令中的一个8位或16位或32位的数,但它不是立即数,而是一个地址

基址(base):存放在基址寄存器(如BX、BP)中的内容。它是有效地址中的基址部分,通常用于指向数据段中数组或字符串的首地址

变址(index):存放在变址寄存器(如SI、DI)中的内容。通常用来指向数组中某个元素或字符串的某个字符

EA=基址+(变址x比例因子)+位移量

 

 

3、直接寻址 MOV AX , [ 2000H ]

 

  

操作数的有效地址只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值即操作数的有效地址

 

 

执行指令:MOV AX ,[2000H]  设(DS)=3000H。 执行后:(AX)=?

执行:(32000H)→AX  执行后:(AX)=3050H

 

4、寄存器间接寻址 MOV AX , [ BX ]

 

 

操作数的有效地址只包含基址寄存器内容或者变址寄存器内容一种成分。因此有效地址就在某个寄存器中,而操作数则在存储器中。(16位寻址可用的寄存器:BX,BP,SI,DI

 

 

物理地址PA=16×DS + SI/DI/BX 

物理地址PA=16×SS+ BP

不允许使用AX、CX、DX 存放 EA

MOV AX, [CX] 错误

5、寄存器相对寻址 MOV AX , COUNT [ SI ]

操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位偏移量之和。 (寄存器的规定同寄存器间接寻址)

 

 

 

 例如:

MOV AX, COUNT[SI]

或 MOV AX, [COUNT+SI]

假设 (DS)=3000H, (SI)=2000H, COUNT=3000H(符号地址)

EA=SI+COUNT=5000H

PA=DS*16+EA=35000H

则: PA = 35000H

假设(35000H)=1234H, 那么 (AX)=1234H * 

 

 

 

6、基址变址寻址 MOV AX , [ BP ] [ DI ]

操作数有效地址是一个基址寄存器(如BX、BP)和一个变址寄存器(如SI、DI)的内容之和。 有效地址由两种成分组成。

 

 

 

 

MOV AX, [BX] [DI]

MOV AX, [BX+DI]

MOV AX, ES:[BX] [SI]

必须是一个基址寄存器和一个变址寄存器的组合

MOV AX, [BX] [BP] 错误

MOV AX, [SI] [DI] 错误

假设指令:MOV BX, [BX+SI],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。问该指令执行后,BX的值是什么?

EA=BX+SI=2111H

PA=DS*16+EA=12111H

所以得出BX的值为1234H

 

 

7、相对基址变址寻址 MOV AX , MASK [ BX ] [ SI ]

操作数有效地址是一个基址寄存器(如BX、BP)的值与一个变址寄存器(如SI、DI)的值和指令中的偏移量之和。( 16位寻址位:移量为8位/16位) 有效地址由三种成分组成。

 

 

 

 

MOV AX, MASK [BX] [SI]

MOV AX, MASK [BX+SI]

MOV AX, [MASK+BX+SI]

假设指令:MOV AX, [BX+SI+200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,AX的值是什么?

EA=BX+SI+200H=2310H

PA=DS*16+EA=12310H

所以得出AX值为1234H