汇编 8086寻址方式
汇编8086寻址方式汇编语言中8086固定寻址方式寄存器寻址方式立即寻址方式数据寻址方式所确定的有效地址分别是什么?...
汇编 8086寻址方式汇编语言中 8086固定寻址方式 寄存器寻址方式 立即寻址方式 数据寻址方式所确定的有效地址分别是什么?
展开
1个回答
展开全部
1. 立即寻址
立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操作数字段,不能用于目的操作数字段。
例1 MOV AL,5
2.直接寻址
在IBM PC机中将操作数的偏移地址称为有效地址EA。在直接寻址方式中有效地址EA就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数.
如操作数在数据段中,则物理地址=16d×(DS)十EA。1BMPC机中允许数据存放在数据段以外的其他段中,此时应在指令中指定段跨越前缀,在计算物理地址时应使用指定的段寄存器。
例4 mov AX , [2000H]
(DS)=3000H,地址32000H中的值为 3050H则,执行结果为;(Ax)=3050H
因为实际mov AX中的内容为 16d * (Ds) +2000H = 32000H
在汇编语言指令中,可以用符号地址代替数值地址,如:
MOV AX,VALUE
此时VAIUE为存放操作数单元的符号地址。如写成
MOV AX,[VALUE]
也是可以的.两者是等效的。如果VALUE在附加段中,则应该指定段跨越前缀如下;
MOV AX, ES:VALUE
或 MOV AX, ES:[VALUE]
直接寻址方式适用于处理单个变量,例如需要处理某个存放在存储器里的变量,可用直接寻址方式,将该变量先取到一个寄存器中,然后在做处理。
IBM PC机规定:除在双操作数中,除立即数外,必须有一个操作数使用寄存器方式。这也是一个常量常常送到寄存器去的原因。
3.寄存器间接址
操作数的有效地址在基址寄存器BX、BP或变垃寄存器SI、DI中,而操作数则在存储器中,如下图所示。
a.如果指令中指定的寄存器是BX、SI、DI,则操作数在数据段(DS)中,所以用DS寄存器的内容作为段地址,即操作数的物理地址为:
物理地址=16d×(DS)十(BX)
或 物理地址;16 d×(DS)十(SI)
或 物理地址=16d×(DS)十(DI)
b.如指令中指定SP寄存器,则操作数在堆栈段(SS)中,段地址在SS中,所以操作数的物理地址为:
物理地址=16d×(SS)十(SP)
MOV AX ,[BX]
如果 (DS)=2000H , (BX)=1000H 则
物理地址=16d×(DS)十(BX) = 20000H+1000H = 21000H
21000H地址里的内容为 50A0H则 执行结果为:(AX)=50A0H
c.指令中也可指定段跨越前缀来取得其他段中的数据。如;
MOV AX,ES:[BX]
这种寻址方式可以用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出表格中的下一项。
4.寄存器相对寻址方式
操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量之和。即
| (BX)
EA = | (BP) + 8位或者16位的位移量
| (SI)
| (DI)
同寄存器寻址一样 BX BP DI 若没有段跨越前缀 物理地址为=16d×(DS) +位移量 + *
SP 物理地址为=16d×(SS)十(SP) + 位移量 + *
举个例子:
MOV AX,COUNT[SI] (也可表示为MOv AX,[COUKT十SI]
其中,COUNT 为16位位移量的符号地址。
如果(DS)=3000H,(SI)=2000H COUNT=3000H
则物理地址 = 30000十2000十3000 =35000H
立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操作数字段,不能用于目的操作数字段。
例1 MOV AL,5
2.直接寻址
在IBM PC机中将操作数的偏移地址称为有效地址EA。在直接寻址方式中有效地址EA就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数.
如操作数在数据段中,则物理地址=16d×(DS)十EA。1BMPC机中允许数据存放在数据段以外的其他段中,此时应在指令中指定段跨越前缀,在计算物理地址时应使用指定的段寄存器。
例4 mov AX , [2000H]
(DS)=3000H,地址32000H中的值为 3050H则,执行结果为;(Ax)=3050H
因为实际mov AX中的内容为 16d * (Ds) +2000H = 32000H
在汇编语言指令中,可以用符号地址代替数值地址,如:
MOV AX,VALUE
此时VAIUE为存放操作数单元的符号地址。如写成
MOV AX,[VALUE]
也是可以的.两者是等效的。如果VALUE在附加段中,则应该指定段跨越前缀如下;
MOV AX, ES:VALUE
或 MOV AX, ES:[VALUE]
直接寻址方式适用于处理单个变量,例如需要处理某个存放在存储器里的变量,可用直接寻址方式,将该变量先取到一个寄存器中,然后在做处理。
IBM PC机规定:除在双操作数中,除立即数外,必须有一个操作数使用寄存器方式。这也是一个常量常常送到寄存器去的原因。
3.寄存器间接址
操作数的有效地址在基址寄存器BX、BP或变垃寄存器SI、DI中,而操作数则在存储器中,如下图所示。
a.如果指令中指定的寄存器是BX、SI、DI,则操作数在数据段(DS)中,所以用DS寄存器的内容作为段地址,即操作数的物理地址为:
物理地址=16d×(DS)十(BX)
或 物理地址;16 d×(DS)十(SI)
或 物理地址=16d×(DS)十(DI)
b.如指令中指定SP寄存器,则操作数在堆栈段(SS)中,段地址在SS中,所以操作数的物理地址为:
物理地址=16d×(SS)十(SP)
MOV AX ,[BX]
如果 (DS)=2000H , (BX)=1000H 则
物理地址=16d×(DS)十(BX) = 20000H+1000H = 21000H
21000H地址里的内容为 50A0H则 执行结果为:(AX)=50A0H
c.指令中也可指定段跨越前缀来取得其他段中的数据。如;
MOV AX,ES:[BX]
这种寻址方式可以用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出表格中的下一项。
4.寄存器相对寻址方式
操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量之和。即
| (BX)
EA = | (BP) + 8位或者16位的位移量
| (SI)
| (DI)
同寄存器寻址一样 BX BP DI 若没有段跨越前缀 物理地址为=16d×(DS) +位移量 + *
SP 物理地址为=16d×(SS)十(SP) + 位移量 + *
举个例子:
MOV AX,COUNT[SI] (也可表示为MOv AX,[COUKT十SI]
其中,COUNT 为16位位移量的符号地址。
如果(DS)=3000H,(SI)=2000H COUNT=3000H
则物理地址 = 30000十2000十3000 =35000H
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询