单片机寻址方式ppt课件.ppt
3.1 MCS-51单片机指令系统概述,3.1.1 指令、指令系统的概念 指令:能完成特定功能的命令。 指令描述的两种基本形式:机器语言和汇编语言 指令系统:计算机能够执行的全部操作所对应的指令集合。 编写程序实际上是从指令系统中挑选一个指令子集的过程。,指令的属性 指令一般有功能、时间和空间三种属性。 功能属性是指每条指令都对应一个特定的操作功能; 时间属性是指一条指令执行所用的时间,一般用机器 周期来表示; 空间属性是指一条指令在程序存储器中存储所占用的 字节数。,指令,操作码,操作数,计算机执行该指令将进行何种操作,参加操作的数的本身或操作数所在的地址,无操作数,单操作数,双操作数,指令格式:,标号: 操作码助记符 目的操作数,源操作数 ;注释,(1) Ri和Rn:表示当前工作寄存器区中的工作寄存器,i取0或1,表示R0或R1。n取07,表示R0R7。 (2) #data:表示包含在指令中的8位立即数。 (3) #data16:表示包含在指令中的16位立即数。 (4) rel:以补码形式表示的8位相对偏移量,范围为-128127,主要用在相对寻址的指令中。,(5) addr16和addr11:分别表示16位直接地址和11位直接地址。 (6) direct:表示直接寻址的地址。 (7) bit:表示可位寻址的直接位地址。 (8) (X):表示X单元中的内容。 (9) (X):表示以X单元的内容为地址的存储器单元内容,即(X)作地址,该地址单元的内容用(X)表示。 (10) / 和符号:“/”表示对该位操作数取反,但不影响该位的原值。“”表示操作流程,将箭尾一方的内容送入箭头所指另一方的单元中去。,3.2 寻 址 方 式,寻址方式:CPU寻找操作数或操作数地址的方法。 寻址方式越多,计算机指令功能越强,灵活性越大。MCS-51采用7种寻址方式:,3.2.1 立即寻址 操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器中,可以立即得到并执行,不需要经过别的途径去寻找,故称为立即寻址。汇编指令中,在一个数的前面冠以#符号作前缀,就表示该数为立即寻址。,指令:MOV A,#5AH机器码:74H 5AH,01110100,01011010,PC,操作码,立即数,01011010,3.2.2 寄存器寻址 在指令选定的某寄存器中存放或读取操作数,以完成指令规定的操作,称为寄存器寻址。 例如:MOVA,R7指令中源操作数和目的操作数都是寄存器寻址。该指令的功能是把工作寄存器R7中的内容传送到累加器A中,如R7中的内容为30H,则执行该指令后A的内容也为30H。,指令:MOV A,R7机器码:EFH,PC,R7,10101001,3.2.3 寄存器间接寻址 由指令指出某一寄存器的内容作为操作数地址的寻址方法,称为寄存器间接寻址。这里需要强调的是:寄存器中的内容不是操作数本身,而是操作数的地址,到该地址单元中才能得到操作数。寄存器起地址指针的作用。,指令:MOV A,R1机器码:E7H,2FH,E7H,PC,R1,2FH,3.2.4 直接寻址 指令中直接给出操作数所在的存储器地址,以供取数或存数的寻址方式称为直接寻址。,指令:MOV A,3FH机器码:E5H 3FH,操作码,直接地址,11100101,00111111,PC,11111111,3FH,11111111,直接寻址可用于访问片内、外数据存储器,也可用于访问程序存储器。直接寻址可访问片内RAM的低128个单元(00H7FH),同时也是用于访问高128个单元的特殊功能寄存器SFR的唯一方法。 由于52子系列的片内RAM有256个单元,其高128个单元与SFR的地址是重叠的。为了避免混乱,单片机规定:直接寻址的指令不能访问片内RAM的高128个单元(80HFFH),若要访问这些单元只能用寄存器间接寻址指令,而要访问SFR只能用直接寻址指令。访问SFR可在指令中直接使用该寄存器的名字来代替地址,如MOV A,80H,可以写成MOV A,P0,因为P0口的地址为80H。,3.2.5 变址寻址,图3.2 变址寻址示意图,基址寄存器加变址寄存器间接寻址,简称变址寻址。,指令:MOVC A,A+DPTR机器码:93H,3FH,PC,1234H,A4H,+,12D8H,12D8H,3FH,93H,3.2.6 相对寻址访问程序存储器,出现在相对转移指令中。相对寻址是将程序计数器 PC中的当前值与指令第二字节所给出的偏移量相加,其和为跳转指令的转移地址。偏移量范围为-128 一+127。例如 SJMP 20H ;机器码为80H 20H。,0 0 1 0 0 0 0 0,1 0 0 0 0 0 0 0,PC,2100H,2101H,2102H,2122H,PC+1,PC+1,PC,2122H,注意: (1) 当前PC值是指相对转移指令的存储地址加上该指令的字节数。 例如:JZ rel 是一条累加器A为零就转移的双字节指令。若该指令的存储地址为2050H,则执行该指令时的当前PC值即为2052H。即当前PC值是对相对转移指令取指结束时的值。 (2) 偏移量rel是有符号的单字节数。以补码表示,其值的范围是-128+127(00HFFH),负数表示从当前地址向前转移,正数表示从当前地址向后转移。所以,相对转移指令满足条件后,转移的地址(目的地址)为: 目的地址=当前PC值+rel = 指令存储地址+指令字节数+rel,3.2.7 位寻址 位寻址是在位操作指令中直接给出位操作数的地址,可以对片内RAM中的128位和特殊功能寄存器SFR中的93位进行寻址。 例如指令MOV C,24H.0;机器码为A2H 20H,相当于MOV C,20H。,