寄存器寻址和隐含寻址(寄存器间接寻址和相对寻址有什么区别呢)(1)

寄存器寻址是在指令的操作码后给出寄存器,指令可以操作寄存器中的数据。例如:

MOV A,R7

这条指令的含义是将寄存器R7中的数据送到累加器A中。

如果寄存器R7中的数据为10101001,执行该条指令后,R7中的数据会送到累加器A中,累加器A中的数据就变为10101001。

寄存器寻址和隐含寻址(寄存器间接寻址和相对寻址有什么区别呢)(2)

寄存器寻址

4寄存器间接寻址是在指令的操作码后给出寄存器,该寄存器中存储的不是数据,而是一个地址,指令可以对该地址指示的单元中的数据进行操作。寄存器间接寻址只能对寄存器R0、R1进行。例如:

MOV A,@R0

这条指令的含义是以寄存器 R0 中的数值作为地址,找到该地址指示的存储单元,再将该单元中的数据送到累加器A中

寄存器寻址和隐含寻址(寄存器间接寻址和相对寻址有什么区别呢)(3)

如果寄存器 R0 中的数值为01010000,该数值也可用50H表示。执行该条指令时,先找到寄存器 R0,然后将它存储的数据 50H (01010000)作为地址单元,再找到50H单元并将该单元存储的数据 01101001送到累加器A中。

寄存器寻址和隐含寻址(寄存器间接寻址和相对寻址有什么区别呢)(4)

寄存器间接寻址

变址寻址又称为基址寄存器 变址寄存器间接寻址,它是以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。

寄存器寻址和隐含寻址(寄存器间接寻址和相对寻址有什么区别呢)(5)

变址寻址

相对寻址是以执行完当前指令后的程序计数器(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的位置分别如图所示。

寄存器寻址和隐含寻址(寄存器间接寻址和相对寻址有什么区别呢)(6)

相对寻址

,