3一251单片机指令的寻址方式 5.变址寻址 ·变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读 的,因此变址寻址只有读操作而无写操作,在指令符号上采用 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
• 变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读 的,因此变址寻址只有读操作而无写操作,在指令符号上采用 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。 5.变址寻址 3-2 51单片机指令的寻址方式
3一251单片机指令的寻址方式 程序存储器 DPTR 2000H A 10H 2000H ◆2010H 64H 64H(10HD ⊕ 图3-4变址寻址示意图 MOVC A,@A+DPTR
图3-4 变址寻址示意图 程序存储器 2000H DPTR 64H(10H) A 2010H 64H 10H 2000H MOVC A,@A+DPTR 3-2 51单片机指令的寻址方式
3一251单片机指令的寻址方式 6.相对寻址 ·以当前程序计数器PC的内容为基础,加上指令给出的一字节补 码数(偏移量)形成新的PC值的寻址方式。 ·相对寻址用于修改PC值,主要用于实现程序的分支转移。 SJMP rel 操作:跳转到的目的地址=当前16位PC值+rel 注意: 1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数; 2)符号“re"表示"偏移量”,是一个带符号的单字节数, 范围是:-128-+127(80H一7FH)
• 以当前程序计数器PC的内容为基础,加上指令给出的一字节补 码数(偏移量)形成新的PC值的寻址方式。 • 相对寻址用于修改PC值,主要用于实现程序的分支转移。 SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel 6.相对寻址 注意: 1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数; 2)符号“rel”表示“偏移量” ,是一个带符号的单字节数, 范围是:-128—+127(80H—7FH), 3-2 51单片机指令的寻址方式
3—2 51单片机指令的寻址方式 程序存储器 2000H SJMP PC 08H (2000HD 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 相对寻址示意图 3-2 51单片机指令的寻址方式
3一251单片机指令的寻址方式 7.位寻址 ·位寻址只能对有位地址的单元作位寻址操作。 位寻址其实是一种直接寻址方式,不过其地址是位地址。指令中直接 给出了操作数所在的位地址。 例如:SETB10H ;将10H位置1若22H单元中存放着数据40H, 22H单 ;元的Do位的位地址为10H,执行上述指令后 ;(22H)=41H。 又如:MOV32H,C;32H-进位位C ORL C,32H C-Cv32H CPL C ;(C)-NOT(C)
• 位寻址只能对有位地址的单元作位寻址操作。 • 位寻址其实是一种直接寻址方式,不过其地址是位地址。指令中直接 给出了操作数所在的位地址。 例如:SETB 10H ;将10H位置1若22H单元中存放着数据40H, 22H单 ; 元的D0位的位地址为10H,执行上述指令后 ;(22H)=41H。 又如:MOV 32H,C ;32H←进位位C ORL C ,32H ;C←C∨32H CPL C ;( C )← NOT( C ) 7.位寻址 3-2 51单片机指令的寻址方式