发 帖  
原厂入驻New
[经验]

寄存器间接寻址和相对寻址的区别是什么

2021-1-20 15:33:50  1685 寄存器
分享
0
  寄存器寻址是在指令的操作码后给出寄存器,指令可以操作寄存器中的数据。例如:
  MOV A,R7
  这条指令的含义是将寄存器R7中的数据送到累加器A中。
  如果寄存器R7中的数据为10101001,执行该条指令后,R7中的数据会送到累加器A中,累加器A中的数据就变为10101001。
  
  寄存器寻址
  4寄存器间接寻址是在指令的操作码后给出寄存器,该寄存器中存储的不是数据,而是一个地址,指令可以对该地址指示的单元中的数据进行操作。寄存器间接寻址只能对寄存器R0、R1进行。例如:
  MOV A,@R0
  这条指令的含义是以寄存器 R0 中的数值作为地址,找到该地址指示的存储单元,再将该单元中的数据送到累加器A中
  
  如果寄存器 R0 中的数值为01010000,该数值也可用50H表示。执行该条指令时,先找到寄存器 R0,然后将它存储的数据 50H (01010000)作为地址单元,再找到50H单元并将该单元存储的数据 01101001送到累加器A中。
  
  
  寄存器间接寻址
  变址寻址又称为基址寄存器+变址寄存器间接寻址,它是以DPTR或程序计数器(PC)中的数值作为基址,以累加器A中的数值作为地址偏移量,将基址和地址偏移量相加后得到的数值作为地址,再对该地址中的数据进行操作。这种方式主要用来访问ROM。例如:MOVC A,@A+DPTR
  这条指令的含义是将DPTR中的数值(基址)与累加器A中的数值(地址偏移量)相加,以相加得到的数值作为地址,再将该地址中的数据送到累加器A中。
  如果DPTR中的数值是1234H(DPH存储12H,DPL存储34H),累加器A中的数值为30H,如执行该指令时,先将DPTR中的数值1234H与累加器A中的数值30H相加,得到数值1264H,将1264H作为地址,找到ROM的1264H单元,再将该单元中的数据01010110送到累加器A中,指令执行后,累加器A中的数据变为01010110。
  
  
  变址寻址
  相对寻址是以执行完当前指令后的程序计数器(PC)中的数值为基址,以操作码后面的数值为地址偏移量,将基址与地址偏移量之和作为地址赋予PC,PC则跳到该地址来执行此地址单元的内容。该寻址方式只能对ROM进行操作。例如:
  1000H:SJMP 06H
  在这条指令中,标号“1000H”为PC执行指令前的值,操作码“SJMP”意为相对转移,“06H”为相对转移量(即地址偏移量)。由于本条指令占用2B的存储单元,如图4-7所示,当执行完这条指令后,PC的值会变为1002H,将1002H(基址)和06H(地址偏移量)相加,得到1008H,再把1008H赋予PC,PC值变为1008H,它立刻跳到1008H存储单元,开始执行该单元的内容。指令执行前、后PC的位置分别如图所示。
  
  
  相对寻址

王浩斌 2021-3-16 09:51:57
不错,学习了.。。。。。。。。。。。。。
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表