8051指令系统的寻址方式概述
·寻址方式------在指令中说明操作数所在地址的方法
·一般说,寻址方式越多,功能就越强大。灵活性则越大,指令系统就越复杂
·寻址方式所要解决的主要问题就是如何在整个存储器和寄存器的寻址空间内快速地找到指定的地址单元
指令系统的寻址方式包括: 寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、立即数寻址方式、基址寄存器加变址寄存器间址寻址方式、相对寻址方式、位寻址方式
接下来我们来一一介绍
寄存器寻址方式
·主要包括:工作寄存器R0-R7、累加器、双字节AB、数据指针DPTR、位累加器Cy
·例如: MOV A, Rn : (Rn)---->A, n=0-7
解释:(A: 累加器 Rn:寄存器)
·寻址空间:R0~R7 , A ,B, C(位),DPTR等
直接寻址方式
·指令中给出操作数的的单元地址,该单元地址中的内容就是操作数,直接的操作数单元地址用 “direct” 表示
·直接寻址是访问片内所有特殊功能寄存器的唯一寻址方式
例子: ① MOV A, direct
·”direct“ 就是操作数的单元地址
·如; MOV A,3AH
MOV A,P0
② MOV direct1, direct2
具体指令: MOV 42H,62H
解释: 把片内RAM中 62H 单元的内容送到片内RAM中的 42H 单元。
·寻址空间:内部128字节RAM,特俗功能寄存器
寄存器间接寻址
·寄存器中存的是 操作数地址,即先从寄存器中找到操作数的地址,再按该地址找到操作数
·为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称加 前缀标志”@“
·可用寄存器间接寻址的有: R0,R1,指针数据DPTR,堆栈指针SP
·例如: MOV A,@Ri; i= 0或 1
·寻址空间:片内数据寄存器,片外数据寄存器
立即数寻址方式
·直接在指令中给出操作数----也称立即数。为了与直接寻址指令中的直接地址加以区别,需要在操作数前加前缀标志 ”#“ 。
·例如: MOV A,#40H
解释:第一个字节是操作码,第二个字节是立即数,就是放在程序存储器内的常数
·第一个字节是操作码,第二个字节是立即数,就是放在程序存储器内的常数
·寻址空间:程序存储器中的立即数
基址寄存器加变址寄存器间址寻址方式
·以DPTR或PC作为 基址寄存器,以累加器A作为 变址寄存器 以两者内容相加形成的16位地址作为目的的地址进行寻址。
·例子:①MOVC A,@A+DPTR
解释:其中,(A) = 05H, (DPTR) = 0400H,指令执行结果是把程序存储器0405H单元的内容传给A。
②MOVC A,@A+PC
③JMP A,@A+DPTR
·前两条指令适用于读程序存储器中固定的数据。
第3条位 散转指令 ,A中的内容为程序运行后的动态结果,可根据A中不同内容,实现跳向不同程序入口的跳转
·寻址空间:读程序存储器中的固定数据和程序散装
相对寻址方式
·解决程序转移。该寻址是以该转移指令的地址(PC值)加上本身的字节数,再加上 相对偏移量(rel), 形成 新的转移目的地址,从而程序转移到该目的地址。转移的目的地地址用下式计算:
目的地址= 转移指令所在的地址+转移指令字节数+rel
·偏移量rel是带符号8位二进制补码数,-128~127
·例如:① 2000H: SJMP 08H
解释: 程序PC地址为2000H,该指令占据2个字节,转移偏移量为08,所以执行该指令后,程序跳转到2000H+2H+08H = 200AH
② SJMP LOOP
解释:”LOOP“为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量。但手工汇编时,偏移量的值由手工计算。
·寻址空间:程序相对跳转
位寻址方式
·对内部RAM和特殊功能寄存器具有位寻址功能的某位内容进行置1和清0操作
·位地址一般以 直接为地址 给出,位地址符号位”bit“。
例如: MOV C , bit·
解释:具体指令: MOV C , 40H
把位地址为40H的值送到进位位C
·寻址空间:内部RAM与SFR中的可寻址位