一次间接寻址的有效地址_寄存器间接寻址和相对寻址有什么区别呢?其实很容易理解的...

6552d7d4a8cdd85e40594cab3cc30ca9.png

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

MOV A,R7

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

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

b1a541bc4ad4edc54ff7a12662df090c.png

寄存器寻址

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

MOV A,@R0

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

48df55d3699ffb639aeb9165f0c1cd29.png

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

4f29f89688f8c27548e800a026af6f0f.png

寄存器间接寻址

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

290b754851391b6c11edb95ef03f4b58.png

变址寻址

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

ae31fe86f1c6c75373e3b2d52cd9f49d.png

相对寻址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值