间接寻址级别不同_直接寻址的工作原理是怎样的?

直接寻址是一种基本的寻址方法,它的主要特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。

0c63fd62baf1313d7776ad432934818a.png

在指令格式的地址字段中直接指出操作数在内存的地址ID。

在大多情况下,操作数存放在数据段中,所以其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,则操作数可存放在其他段。

直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值。

指令中直接给出操作数地址(dir)的寻址方式称为直接寻址。

寻址对象为:

  1. 内部数据存储器。在指令中以直接地址表示;
  2. 特殊功能寄存器SFR。在指令中用寄存器名称表示。

以寄存器中的内容为地址,该地址的内容为操作数的寻址方式,称为寄存器间接寻址。能够进行寄存器间接寻址的寄存器有R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。寄存器间接寻址的存储空间包括内部数据存储器和外部数据存储器。由于内部数据存储器共有128字节,因此用一字节的R0和R1可间接寻址整个空间。而外部数据存储器最大可达64KB,仅R0或R1无法寻址整个空间,为此需要由P2端口提供外部RAM高8位地址,由R0或R1提供低8位地址,由此共同寻址64KB范围,也可用16位的DPTR寄存器间接寻址64KB存储空间。

4ff84564e56bff9060ad2d4b7efd2780.png

需要注意的是,立即寻址方式和直接寻址方式的书写格式不同。在程序中,直接寻址的地址要写在括号“[]”内,立即地址通常用内存变量名来表示,如MOV BX,VARW,其中,VARW是内存字变量。直接寻址如MOV AX[2000H]。

在直接寻址中,指令操作数字段中存放的是操作数的16位偏移地址(EA),即操作数的偏移地址和操作码一起存放在代码段中,而操作数可以存放在数据段,也可以存放在其他段,操作数的物理地址由其所在段的寄存器内容左移4位与指令中给出的偏移地址相加形成。物理地址PH=(DS)*10H+EA(Disp)EA可以用符号或数值表示。如果用数值表示EA则必须用括号括起来,而且在方括号前应给出段寄存器名,直接寻址的操作数可以是字或字节。

若没有特殊说明,直接寻址的操作数一般在内存的数据段中,即隐含的段寄存器是DS。但是8086/8088也允许段超越,即允许使用CS,SS,ES作为段寄存器,此时需要在指令中特别标明,方法是在有关操作数的前面加上寄存器的名字,再加上冒号。例如:MOV AX EX:[2000H]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值