一、单片机寻址—位寻址
MCS-51系列单片机中有专用的位运算指令,可以对位寻址区的每一个位进行数据传送、逻辑运算等操作,如:
MOV C, 07H; C←(07H)
该指令属于位操作指令,作用是将位地址为70H的位单元(字节地址20H单元的D7位)传送到位累加器C中。
二、单片机寻址—相对寻址
相对寻址以PC当前值(PC当前值是执行完指令后的值,也就是当前指令的PC值+指令所占的字节数)作为基地址,与指令中给定的偏移量rel相加,所得的结果作为程序的转移地址,指令中的偏移量rel是一个用补码表示的8位带符号数。相对寻址用于相对转移指令中,如:
JZ 30H; 当A=0时,PC←PC+2+rel
当A≠0时,PC←PC+2 //程序顺序执行
该指令以累加器Acc的值是否为0为转移条件,如果为Acc的值0则转移,如果Acc的值不为0则程序顺序执行。程序的执行过程见相对寻址(二)。
在MCS-51的指令系统中,相对转移指令多为2字节指令,因此目的地址一般是PC+2+rel;如果是3字节指令,目的地址是PC+3+rel。偏移量rel是一个8位带符号数,因此程序转移的范围在PC当前值的+127—-128之间。
三、单片机寻址—变址寻址
将PC或DPTR的值作为基地址,将Acc的值作为变址地址,二者向加得到的值作为操作数的地址,如:
MOV A, @A+DPTR; A←((A)+(DPTR))
这种寻址方式一般用于常数表,DPTR的内容为表头地址,Acc的内容就是数据在表中的位置。
四、单片机寻址—寄存器间接寻址
在指令的操作码中包含了某一工作寄存器的地址(可用作地址指针的工作寄存器是@Ri:R0、R1),而操作数地址则存放在该寄存器中,如:
MOV A, @R1; A←((R1))
该指令是将R1的内容送作为地址,将该地址所对应的RAM单元的内容送累加器。
五、单片机寻址—寄存器寻址
在指令的操作码中包含了某一工作寄存器的地址(Rn:R0—R7),而操作数则存放在该寄存器中,如:
MOV A, R5; A←(R5)
该指令是将R5的内容送累加器。
六、单片机寻址—直接寻址
在指令中直接给出操作数地址的寻址方式称为直接寻址,直接寻址何以寻址特殊功能寄存器、内部RAM(128字节)和位地址,如:
MOV A, 70H; A←(70H)
该指令是将RAM单元70H(地址)的内容送累加器。
七、单片机寻址——立即寻址
在指令中直接给出操作数的寻址方式称为立即寻址。这个操作数叫立即数,如指令:
MOV A, #3AH
该指令是将立即数3AH送累加器,由于MCS-51单片机的片内存储器是8位存储器,因此立即数一般为8位二进制数。在MCS-51的指令系统中,用#来识别立即数
在有的指令中,也会用到16位立即数,如:
MOV DPTR, #0123H
该指令是将16位立即数0123H送数据指针DPTR(用于对16位地址的存储器寻址),DPTR由两个特殊功能寄存器DPH和DPL组成,在后面的寻址方式中会使用到DPTR。