寻址方式就是寻找操作数的方式,所以说寻址方式本质上是根据寻找操作数的方式来区分的。80C51有7种寻址方式:
- 立即寻址:操作码之后是立即数(8位或16位二进制数)
如:MOV A, #01H ;表示将立即数01H送到累加器A - 直接寻址:操作码之后是操作数所在单元的地址
如:MOV A, 01H ;表示将01H地址单元的内容送到累加器A
可采用直接寻址的空间有:片内RAM低128字节(00H–7FH)、特殊功能寄存器 - 寄存器寻址:操作码之后是存放操作数的寄存器单元
如:MOV A, R1 ;表示将R1寄存器中的内容送到累加器A
可使用的寄存器:R0–R7、累加器A、寄存器B、数据指针寄存器DPTR和位处理器C - 寄存器间接寻址:操作码之后是存放 操作数所在的寄存器单元地址 的寄存器
如:MOV A, @R1 ;表示以R1中存放的内容为操作数地址,根据操作数地址找出操作数,然后送到累加器A
可使用的寄存器:R0、R1、数据指针寄存器DPTR
寻址对应的空间为:
片内RAM(@R0,@R1,SP)
片外RAM(@R0,@R1,@DPTR) - 变址寻址:将两个寄存器的内容相加作为操作数的地址
如:MOVC A, @A+DPTR; 表示将A寄存器和DPTR寄存器的内容相加,作为操作数的地址,根据操作数地址找出操作数,然后送到累加器A
注意:只限于访问ROM,且以PC或DPTR作为基址,A作为变址 - 相对寻址:以PC的内容作为基地址,加上指令给定的有符号8位偏移地址,所得结果作为跳转地址
如:JC rel ;表示跳转到当前PC值+rel的地址单元处,取指令并执行
注意:当前PC值为:该指令存储地址+指令字节数 - 位寻址:属于直接寻址,但它的寻址对象是可寻址空间的一个位而不是一个字节
如:MOV C, 00H; 将位地址00H的内容送到PSW寄存器的CY位
可寻址位有:内部RAM的20H–2FH以及部分SFR位
以上是我看书后对80C51七种寻址方式的总结,不足之处请在评论区指出。