1、单片机原理寻址方式 寻址的“址”是指操作数所在的单元地址。绝大多数指令执行时都需要使用操作数,因此也俄存在着到那里去取得操作数的问题。因为在计算中只要给出单元地址,就能得到所需要的操作数。因此所谓寻址,其实质就是如何确定操作数单元地址的问题。 根据指令操作的需要,计算机总是提供多种寻址方式。一般来说,寻址方式越多计算机的筹址能力就越强,但是指令系统也就愈加复杂。因此在设定寻址方式时应考虑到实际的需要和可能。单片机共有七种寻址方式,下面分别介绍。a寄存器寻址方式”寄存器寻址就是操作数在寄存器中,因此指定了寄存器就能得到操作数。寄存器寻址方式勺指令中以符号名称来表示寄存器。例如指令: MOV A,
2、 RO 其功能是把寄存器RO的内容传送到累加器A中。由于操作数在RO中,因此在指令中指起了RO,也就得到了操作数,所以是寄存器寻址方式。 寄存器寻址方式的寻址范围包括:D四个寄存器组共32个通用寄存器。但在指令中只能使用当前寄存器组,因此在使用前常 需通过对PSW中RS;、RS。位的状态设置,来进行当前寄存器组的选择。开部分专用寄存器。例如累加器A、AB寄存器对以及数据指针DPTR等。2直接寻址方式 指令中操作数直接以单元地址的形式给出,就称之为直接寻址。例如指令: MOV A,3AH 其功能是把内部RAM 3AH单元中的数据传送给累加器A。, 因为直接寻址方式只能使用8位二进制地址,因此这种
3、寻址方式的寻址范围只限于内部RAM,具体说就是:低128单元。在指令中直接以单元地址形式给出。专用寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。 应当指出,直接寻址是访间专用寄存器的唯一方法。S守有器间接寻址方式 寄存器寻址方式,寄存器中存放的是操作数。而寄存器间接寻址方式,寄存器中存放的则是操作数的地址,即操作数是通过寄存器间接得到的,因此称之为寄存器间接寻址。 寄存器间接寻址也需以寄存器符号的形式表示。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器的名称前面加前缀标志“”。 假定RO寄存器的内容是3AH,则指令 MOV A,RO为功能是以RO
4、寄存器内容3AH为地址,把该地址单元的内容送累加器A。其功能示意请参rp21。 寄存器间接寻址方式的寻址范围:内部RAM低128单元 对内部RAM低128单元的间接寻址,应使 用 RO或 RI作间址寄存器,其通用形式为 Ri(i0或 1)。外部RAM 64KB 对外部RAM 64KB的间接寻址应使用 DPTR作间址寄存器,其形式为DPTR。例 如。MOVX A,DPTR,其功能是把 。,一、。图21寄存器间接寻址示意图 DPTR指定的外部 RAM单元的内容运累加一”一”一 器A。 外部RAM的低256单元是一个特殊的寻址区,除可以使用DPTR作间址寄存器寻址外,还可使用 RO或RI作间址寄存器
5、寻址。例如MOVX A,RO,即把RO指定的外部RAM单元的内容送累加器A。 此外对于堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针(SP)作间址寄存器的间接寻址方式。4立即寻址方式 所谓立即寻址就是操作数在指令中直接给出。通常把出现在指令中的操作数称之为立即数,因此就把这种寻址方式称之为立即寻址。为了与直接寻址指令中的直接地址相区别,在立即数前面加“”标志。例如: MOV A, 3AH 其中3AH就是立即数,指令功能是把数据3AH送累加器A。 除 8位立即数外, MCS51指令系统中还有一条 16位立即寻址指令,即: MOV DPTR, data16 其功能是把 16
6、位立即数送数据指针 DPTR。5位寻址方式 MCSsl有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。例如: ANL C,30H指令功能是累加位 C的状态和地址为 3 OH的位状态进行逻辑与操作,并把结果保存在 C中。 位寻址的寻址范围:内部 RAM中的位寻址区。单元地址为 20H ZFH,共 16个单元 128位,位地址是 00H 7FH(详见表12)。对这128个位的寻址使用直接位地址表示。例如:MOV C,ZBH指令 功能是把位寻址区的ZBH位状态送累加位。专用寄存器的可寻址位。可供位寻址的专用寄存器共有11个,实有寻址位83位。对这些 寻址位在指令中有如下四种表示方法:
7、直接使用位地址。这些位地址在表14中已列出。例如PSW寄存器位5地址为DSH。 位名称表示方法。专用寄存器中的一些寻址位是有符号名称的,例如PSW寄存器位5 是F。标志位,则可使用F。表示该位。 单元地址加位的表示方法。例如 DOH单元(即 PSW寄存器)位 5,表示为 DOH 5。 专用寄存器符号加位的表示方法。例如PSW寄存器的位5,表示为PSW5。 一个寻址位有多种表示方法,初看起来有些乱,但实际上这将为程序设计带来方便。6变址寻址方式、MCS 51的变址寻址是以 DPTR或 PC作基址寄存器,以累加器 A作变址寄存器,并以两者内容相加形成的16位地址作为操作数地址。例如指令: MOVC
8、 A,ADPTR 其功能是把DPTR和A的内容相加,再把所得到的程序存储器地址单元的内容送A。假定指令执行前(A)54H,(DPTR)一3F21H,则该指令的操作示意请参见图22。 变址寻址形成的操作数地址为3F21H54H3F75H,而3F75H单元的内容为7FH,故该指令执行结果是A的内容为7FH。 对 MCS 51指令系统的变址寻址方式作如下说明:变址寻址方式只能对程序存储器进行寻址,或者说它是专门针对程序存储器的寻址方式。变址寻址的指令只有三条: MOVC A,ADPTR MOVC A,APC JMPADPTR 其中前两条是程序存储器读指令,后一条是无条件转移指令。尽管变址寻址方式较为
9、复杂,但变址寻址的指令却都是一字节指令。7相对寻址方式 相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所采用。 在相对寻址的转移指令中,给出了地址偏移量(在MCS51指令系统中以“rel”表示),把PC的当前值加上偏移量就构成了程序转移的目的地址。但这里的PC当前值是指执行完该转移指令后的PC值,即转移指令的PC值加上它的字节数。因此转移的目的地址可用如下公式表示: 目的地址一转移指令地址十转移指令字节数 一一I rel 在 MCS 51指令系统中,有多条相对转移指令,这些指令多数为二字节指令,但也有个别为三字节的。 偏移量 rel是一个带符号的 8位H进制补码数。所能表示的数的范
10、围是一 12 8 12 7,因此相对转移是以转移指令所在地址为基点,向前最大可转移(127十转移指令字节数)个单元地址,向后最大可转移(128一转移指令字节数)个单元地址。 最后还应说明,因为在指令操作中有从右向左传送数据的约定,所以常把左边操作数称之为目的操作数,而右边操作数称之为源操作数。上面所讲各种寻址方式的举例中都是针对源操作数的。但实际上源操作数和目的操作数都有寻址的问题,例如指令: MOV 45H, RI 其源操作数是寄存器寻址方式,而目的操作数则是直接寻址方式,因此指令的功能是把按寄存器寻址取出的RI内容再以直接寻址方式存放于内部RAM的45H单元中。 总的来说,源操作数的寻址方
11、式多,而目的操作数的寻址方式较少, MCS一引中国的操作数据的寻址只有寄存器寻址、直接寻址、寄存器间接寻址和位寻址共四种方式。因此知道了源操作数的寻址方式也就不难了解目的操作数的寻址问题了。213单片机执行指令的过程 单片机的工作过程就是执行程序的过程。而程序是由指令组成的,因此执行程序的过程,就是执行指令的过程。而指令的执行又分为取指令和执行指令两项基本内容,所以单片机的工作过程,实际上就是周而复始地取指令和执行指令的过程。 在取指阶段中,单片机从程序存储器中取出指令操作码,送指令寄存器,再经指令译码器译码,产生一系列的控制信号,然后进入指令执行阶段。在指令执行阶段。就是利用指令译码产生的控
12、制信号,进行本指令规定的数据操作。 为进一步说明单片机的工作过程,下面举一个程序实例进行说明。例如为了使单片机进行53的操作,需编写如下程序: MOV A, 05H ADD A, 03H MOV RO,A 执行上述程序,就可以完成5十3的操作,并把相加结果8送RO寄存器中存放。 但是单片机并不能直接使用助记符式的汇编指令,因此需把助记符指令转换为二进制指令代码。上述程序表示如下:指令名称 助记符形式 指令代码 注释 立即数传送MOV A, 05H0ill0100 74一个加数送累加器A 00000101 05 加立即数 ADD A, 03H 00100100 24累加器 A内容( 05)与立即
13、数 00000011 03(03)相加,其和在A中 数据传送 MOV RO,A 1111正00O FS相加结果送寄存器RO 214指令中符号意义说明 在分类介绍指令之前,先把指令中使用的一些符号意义作简单说明。 Rn当前寄存器组的 8个通用寄存器ROR7,所以 n07。 Ri可用作间接寻址的寄存器,只能是RO、RI两个寄存器,所以i0,1。 direct内部RAM的8位地址。既可以是内部RAM的低128个单元地址,也可t 用寄存器的单元地址或符号。因此在指令中dire。t表示直接寻址方式。 data8位立即数。 data1616位立即数。 addrl6 16位目的地址,只限于在 LCALL和
14、LJMP指令中使用。 addrll11位目的地址,只限于在ACALL和AJMP指令中使用。 rel相对转移指令中的偏移量,为8位带符号补码数。 DPTR数据指针。 bit内部RAM(包括专用寄存器)中的直接寻址位。 A累加器。(直接寻址方式的累加器表示为 ACC)。 BB寄存器。 C进位标志位,它是布尔处理机的累加器,也称之为累加位。 间址寄存器的前缀标志。 加在位地址的前面,表示对该位状态取反。 (X)某寄存器或某单元的内容。X由X间接寻址的单元中的内容。 箭头左边的内容被箭头右边的内容所取代。22数据传送类指令 MCS 51指令系统中,各类数据传送指令共有 2 9条,分述如下。22l内部R
15、AM数据传送指令组 单片机芯片内部是数据传送最为频繁的部分,有关的传送指令也最多,包括寄存器器、RAM单元以及专用寄存器之间的相互数据传送。1立即教传进指令 8位立即数传送指令共四条: MOV A,#data ;A data MOV direct,#data ;direct data MOV Rn,dsts ;Rndata MOV Ri,data ; (Ri) data 这四条指令的功能都是实现8位立即数的传送,把立即数传送到不同寻址方式的内部RAM单元中。 此外还有16位立即数传送指令一条: MOV DPTR, data16 ;DPTR data16 这条指令的功能是将立即数的高8位送DPH
16、,立即数的低8位送DPL。这条指令是三字节指令,即操作码占一个字节,16位立即数占两个字节,其排列顺序为: 这种高位在前低位在后的存放顺序与Z80指令系统规定的顺序正好相反。请学习过Z90的读者注意。!内部RAM单元之间的数据传送指令 内部RAM单元之间的数据传送指令共有五条: MOV direct2,directl ;directZ (directl) MOV direct, Rn ;direct (Rn) MOV Rn, directl ;Rn (direct) MOV direct,Ri ;direct (Ri) MOV Ri,directl ;(Ri) (direct) 内部RAM单元
17、之间的数据传送可以使用直接寻址、寄存器寻址以及寄存器间接寻址方式。例如下列指令均属于内部RAM单元之间的数据传送指令: MOV P2, R2 ;寄存器RZ内容送P2口 MOV A0H, R2 ;寄存器RZ内容送P2口,AOH是P2口的地址。 MOV DOH,R1 ;RI内容所指定的内部RAM单元的内容送PSW 寄存器,DOH是PSW的单元地址。 MOV R5, 70H ;内部RAM 70H单元的内容送R53累加器的数据传送指令 与累加器有关的数据传送指令共有六条: MOV A,Rn ;A (Rn) MOV Rn, A ;Rn (A) MOV A,direct ;A (direct) MOV d
18、irect,A ;direct (A) MOV A,Ri ;A (Ri) MOV Ri,A ;(Ri)(A) 这六条指令用于实现累加器与不同寻址方式的内部RAM单元之间的数据传送。222外部RAM数据传进指令组 对外部 RAM单元只能使用间接寻址方法,但可以分别使用 DPTR和 Ri作间址寄存器,因此相应地就有两组指令:1使用DPTR进行间接寻址 MOVX A,DPTR ;A DPTR) MOVX DPTR,A ;(DPTR)(A) 由于 DPTR是 16位地址指针,因此指令的寻址范围为 64KB。2使用Ri进行间接寻址 MOVX A,Ri ;A (Ri) MOVX Ri,A ;(Ri)(A)
19、 i(0,1),由于RO和RI是8位地址指针,因此指令的寻址范围只限于外部RAM的低256个单元。 对外部RAM数据传送指令作如下说明: MCS 51指令系统中没有专用的存储器读写指令,实际上外部数据存储器数据传送指令 就是外部RAM的读写指令。外部RAM数据传送指令与内部RAM数据传送指令相比,在指令助记符中增加了“X”, “X”是代表外部之意。外部RAM的数据传送,只能通过累加器A进行。223程序存储器数据传送指令组 这里所说的程序存储器既包括内部程序存储器,也包括外部程序存储器。 由于对程序存储器只能读而不能写,因此其数据传送都是单向的,即从程序存储器读出数据,并且只能向累加器A传送。这
20、类指令共两条: MOVC A,ADPTR ;A (A)十(DPTR) MOVC A,APC ;A (A)(PC) 这两条指令都是一字节指令,并且都为变址寻址方式,其寻址范围为64KB。 这两条指令通常用于查表操作,因此可以看成是查表专用指令。虽然这两条指令的功能完”全相同,但在具体使用中却有一点差异。前一条指令的基址寄存器 DPTR能提供 16位基址, 而且还能在使用前给DPTR赋值,因此查表范围可达整个程序存储器的64KB空间。使用起来 比较方便;而后一条指令是以 PC作为基址寄存器,虽然也能提供 16位基址,但其基址值是固 定的,由于 A的内容为 8位无符号数,因此只能在当前指令下面的 2
21、 5 6个地址单元范围内进 行查表。 例如以查表方法把累加器中的十六进制数转换为ASCll码,并送回累加器中。其查表程 序如下: 2000 HBA: INC A 2001 MOVC A,A+PC 2002 RET 20C3 DB 30H ;以下是十六进制数ASCll码表 2004 DB 31H2005 DB 32H . . . . . . . . . 200C DB 39H 200D DB 41H 200E DB 42H 200F DB 43H 2010 DB 44H 2011 DB 45H 2012 DB 46H由于数据表紧跟MOVC指令之后,因此以PC作为基址寄存器比较方便。假定A中的十,
22、六进制数为00H,加 1后为 01H,取出 MOVC指令后,(PC)一 2002H,(A)(PC)一 2003H,从 2Q03H单元取得数据送A,则(A)30H,此即为十六进制数0的 ASCll码值。查表之前A加 1 是因为MOVC指令与数据表之间有一个地址单元的间隔(RET指令)。 224数据交换指令组。 数据交换主要是在内部RAM单元与累加器A之间进行,有整字节和半字节两种交换。1医字节交换指令;地址单元与累加器A进行8位数据交换,共有如下三条指令: XCH A, Rn ;(A) (Rn) XCH A, direct ;(A) (direct), XCH A, Ri ;(A) (Ri)2半
23、字节交换指令 。地址单元与累加器A进行低4位的半字节数据交换。只有一条指令: XCHD A,Ri ;(A)30 (RI)303累加器高低半字节交换搭个 只有一条指令: SWAP A ;(A)30 (A)30 由于十六进制数或BCD码都是以四位二进制数表示,因此XCHD和SWAP指令主要用于实现十六进制数或BCD码的数位交换。例如: (RO) 20H,(A)= 3FH,(20H) 75H, 执行指令XCHD A,RO后,(RO)20H,(A)= 35H,(20H)= 7FH。225堆栈操作指令组 堆栈操作有进栈和出栈两种,因此相应有两条指令: 进栈指令: PUSH direct ;SP(SP)1
24、,(SP)(direct) 其功能为内部RAM低128单元或专用寄存器内容送栈顶单元。 出栈指令: POP direct ;direct (SP), SP(SP)1 其功能为栈顶单元内容送内部RAM低12 8单元或专用寄存器。 堆栈操作实际上是通过堆栈指示器SP进行的读写操作,是以SP为间址寄存器的间接寻址方式。但因为SP是唯一的,所以在指令中把通过SP的间接寻址的操作数项隐含了,只表示出直接寻址的操作数项。226数据传送类指令汇总及说明 数据传送类29条指令的简单情况汇总于表21。 表21据传送类指令一览表指令 功 字节数机器 能简述 周期数MOV A,Rn 寄存器送累加器 l 1 MOV
25、RnA 累加器送寄存器 1 1 MOV A,Ri 内部RAM单元送累加器l l MOV Ri,A 累加器送内部RAM单元l 1 MOV A, data 立即数送累加器 2 且 指令 功能简述 字节数机器 周期数MOV A, direct 直接寻址单元送累加器 2, 1 MOV direct, A 累加器送直接寻址单元 2 1 MOV Rn, data 立即数送寄存器 2 1 MOV direct data立即数送直接寻址单元 3 2 MOV Xi, data 立即数送内部RAM单元 2 且 mVdirect,Rn 寄存器送直接寻址单元 2 2 MOV Rn, direct 直接寻址单元送寄存器 2 2 MOV direct,Xi 内部RAM单元送直接寻址单元 2 2 MOVRi, direct 直接寻址单元送内部RAM单元 2 2 MUV directZ,directl 直接寻址单元送直接寻址单元 3 2 MOV DPTR, data16 16位立即数送数据指针 3 2 MOVX A,Ri 外部RAM单元送累加器(8位地址) l 2 MOVXB,A 累加器送外部RAM单元(8位地址) 且 2 MOVX A,DPTR 外部RAM单元送累加器(16位地址) 且 2 MO
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1