变址寻址 ◆变址寻址只能对程序存储器中数据进行操作。由 于程序存储是只读的,因此变址寻址只有读操 作而无写操作,在指令符号上采用MovC的形式 (如图3-4所示)。 例如: MOVC A,aA+DPTR;A←(A+DPTR) [设:A中已存有#10H,DPTR中已存有#2000H] 操作:将10H+2000H=2010H单元中的数放进累 加器A 又如, MOVC A,@A+PC;A←(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC
变址寻址 变址寻址只能对程序存储器中数据进行操作。由 于程序存储器是只读的,因此变址寻址只有读操 作而无写操作,在指令符号上采用MOVC的形式 (如图3-4所示)。 例如:MOVC A,@A+DPTR ;A←(A+DPTR) [设:A中已存有#10H,DPTR中已存有#2000H] 操作:将10H+2000H=2010H单元中的数放进累 加器A 又如,MOVC A,@A+PC ;A←(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC
程序存储器 DPTR 200OH A 10H 2000H 2010H 64H 64H(10H 图3-4变址寻址示意图
图3-4 变址寻址示意图 程序存储器 2000H DPTR 64H(10H) A 2010H 64H 10H 2000H
相对寻址 ◆以当前程序计数器PC的内容为基础,加上指令给出的 一字节补码数(偏移量)形成新的PC值的寻址方式 ◆相对寻址用于修改PC值,主要用于实现程序的分支转 移 SJMP rel 操作:跳转到的目的地址=当前16位PC值+rel 注意: 1)“当前PC值”指程序中下一条指令所在的首地址, 个16位数 2)符号“re”表示“偏移量”是一个带符号的单字 节数,范围是:-128+127(80H7FH)
相对寻址 以当前程序计数器PC的内容为基础,加上指令给出的 一字节补码数(偏移量)形成新的PC值的寻址方式。 相对寻址用于修改PC值,主要用于实现程序的分支转 移。 SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel 注意: 1)“当前PC值”指程序中下一条指令所在的首地址, 是一个16位数; 2)符号“rel”表示“偏移量” ,是一个带符号的单字 节数,范围是:-128—+127(80H—7FH)
程序存储器 2000H SJMP PC (2000 08H 08H 2000H+2 200AH 200AH 例如,SJMP08H;PC←PC+2+08H 图3-5相对寻址示意图
程序存储器 (2000H) 200AH SJMP 200AH 08H 2000H+2 08H PC 2000H 例如,SJMP 08H ;PC←PC+2+08H 图3-5 相对寻址示意图