指令系统的寻址方式
寄存器寻址
- 指令中的操作数为某一寄存器的内容
- 例如:MOV A, Rn
(Rn) → \rightarrow →A , n=0~7
指令指定了从寄存器Rn中取得源操作数,故被称为寄存器寻址方式
直接寻址
- 直接给出操作数的单元地址,地址单元中的内容就是操作数
- 例如:MOV A, direct
"direct"是操作数的单元地址 - 例如:MOV A, 40H : 表示把内部RAM 40H单元的内容传送到A
直接寻址是访问片内所有特殊功能寄存器的唯一寻址方式
寄存器间接寻址
- 寄存器中存的是操作数的地址,即先从寄存器中找到操作数的的地址,再按该地址找到操作数
- 在寄存器名称前面加前缀标志“@”,表示寄存器中存的是操作数地址。
- 例如:MOV A, @Ri; i=0或1
Ri的内容为40H,即把内部RAM 40H地址单元中的内容传送给A。
立即数寻址
- 直接在指令中给出操作数—也称立即数。为了与直接寻址地址指令中的直接地址加以区别,需在操作数前加前缀标志“#”。
- 例如:MOV A, #40H
源操作数是立即数,存放在程序存储器内。
基址寄存器加变址寄存器间接寻址
- 以DPTR或PC作为基址寄存器,以A作为变址寄存器,两者内容相加形成的16位地址作为目的地址进行寻址。
- 例如:MOVC A, @A+DPTR
其中,(A)= 05H,(DPTR)= 0400H,指令执行结果是把程序存储器0405H单元的内容传送给A。 - 本寻址方式指令有三条:
MOVC A, @A+DPTR
MOVC A, @A+PC
JMP @A+DPTP - 前两条指令适用于读程序存储器中固定的数据。例如,将固定的,按一定顺序排列的表格存放在程序存储器中,在程序运行中由A的动态参量来确定读取对应表格参数。
- 第三条为散转指令,A中内容为程序运行后的动态结果,可根据A中不同内容,实现跳向不同程序入口的跳转。
相对寻址方式
- 该寻址方式是以该转移指令的地址(PC值)加上它的字节数,再加上相对偏移量(rel),形成新的转移目的的地址,从而程序转向该目的地址。
- 转移目的地址的计算:
目的地址=转移指令所在的地址+转移指令字节数+rel
偏移量rel是带符号8位二进制补码数,-128~+127。 - 例如:LJMP rel
程序要转移到该指令的PC值+3(LJMP指令的字节数)+偏移量rel的目的地址处。编程时,只需要在转移指令中直接写要转向的地址标号。 - 例如:LJMP LOOP
“LOOP”为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量。
位寻址
- 对可位寻址功能的某位内容进行置“1”和清零“0”。
- 位地址一般以直接地址给出,位地址符号为"bit".
- 例如:MOV C, bit 其具体指令:MOV C, 40H
把位地址为40H的值送到进位位C。