×

51单片机的相对寻址问题的探讨资料说明

消耗积分:0 | 格式:rar | 大小:0.07 MB | 2019-08-21

分享资料个

  MCS-51系列单片机作为经典的单片机应用十分广泛,其指令总共有111条。其指令中对操作数的寻址方式有7种,分别为立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。在学习相对寻址的内容和有关相对寻址的指令时,许多初学者会对于偏移量的值和跳转目的地址的值混淆不清,产生疑惑和不解。许多教材对此问题的解释也不一致,甚至有错误,这加深了初学者的困惑和理解错误。仿真技术在电子电路设计中得到了广泛的应用,利用Protues、伟福软件等可以很直观的展示程序的执行过程。为了揭示相对寻址的本质,本文将利用Protues仿真软件和伟福软件的仿真功能对相对寻址进行剖析。

  相对寻址方式是为了程序的相对转移而设计的,其过程是以当前PC的内容为基址,加偏移量作为转移地址,从而实现程序的转移。转移的目的地址取决于表达式:目的地址=转移指令地址+转移指令字节数+偏移量。需要注意的是,偏移量是有正负号之分的,偏移量的取值范围是当前PC值的-128~+127之间。该表达式应这样理解:在执行转移指令语句时,PC的内容是转移指令的下一条指令的地址值,该地址值加上要偏移的地址字节数形成新目的地址,然后程序跳转到新的目的地址,其中要偏移的地址字节数为8位有符号数二进制数,即偏移量在-128~+127之内。那么这个偏移量是如何得到的呢?在许多教材和文章中均以rel作为相对寻址的标志,这些教材和文章对相对寻址的解释都很相似,其解释为:以程序计数器PC的当前值为基址,加上汇编指令中给出的相对偏移量rel,形成新的PC值,即跳转目的地址,相对偏移量rel为一字节补码数,其表示范围为-128~+127[1-8]。举例来说明此问题,如下面的汇编语言程序语句:

  ORG 0200H

  MOV A,#36 ;双字节指令

  JNZ 30H ;双字节指令

  按这些教材和文章中的解释,执行指令JNZ 08H时PC值变为0202H+2,30H就是相对偏移量,该指令执行后程序应该跳转到目的地址=0202H(转移指令地址)+2(转移指令JZ的字节数)+30H(偏移量)=0232H上。事实上这种解释是错误的,该跳转指令执行后程序不会跳转到计算出的目的地址上去。笔者认为应该是:进行相对寻址时,确实是以PC的当前值作为基址,加上相对偏移量形成新的目的地址,但是在汇编指令中并不能直接看出相对偏移量,这个偏移量体现在机器码中;而汇编指令中的rel,不管是数值形式还是符号形式只能是目的地址值,且其距离在当前PC值-128~+127的范围内。

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

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !