论文部分内容阅读
摘 要: 我们已经知道,单片机的工作过程就是一条一条地从ROM存储器中取出指令然后执行相关的操作。一般来说,一条指令总是有操作码字段和操作数字段两部分组成,单片机执行指令时就根据指令中给出的地址寻找实际的操作数,寻址方式就是根据指令中给出地址寻找操作数地址的方式。根据指令操作的需要,计算机有多种寻址方式。总的来说,寻址方式越多,计算机的功能就越强,灵活性越大,指令系统也越复杂,而本文主要介绍的是51单片机指令系统中的7种寻址方式。
关键词: 寻址方式;操作数;单片机
1 引言
指令的寻址方式MOVA,#20H这条指令,第一个词MOV是命令动词,也就是决定做什么事情的。MOV是英文单词“MOVE”少写了一个E,代表的含义是“传递或传送”,这就是指令,规定做什么事情,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是20H,而要送达的地方(目的地)就是A这个累加器。注意:源操作数、目的操作数都有各自的寻址方式,而这里所介绍的寻址方式是指目的操作数的寻址方式。在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。
2 8051单片机的7种寻址方式
2.1 立即寻址
指令中直接给出操作数的寻址方式称为立即数寻址。在51系列单片机指令系统中,为了与直接寻址指令中的直接地址相区别,立即数用前面加“#”号的8位数表示(#data,如#20H)或16位数(#data16,如#1000H)表示。举例说明立即数寻址方式,以传送指令为例。
例:MOVA,#20H;把8位立即数20H送入累加器A。
MOVDPTR,#1000H;把16位立即数1000H送入数据指针DPTR寄存器。
2.2 直接寻址
直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。
例如:MOVA,30H;把内部RAM30H单元的内容送入累加器A。
MOV30H,20H;把内部RAM20H单元的内容送入内部RAM30H单元。
在80C51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间,具体内容是:
1)内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。
2)位寻址区。20H-2FH地址单元。
3)特殊功能寄存器。专用寄存器除可以以单元地址形式给出外,还可以以寄存器符号形式给出。例如指令MOVIE,#85H。我们知道,中断允許寄存器IE的地址是80H,那么也就是这条指令可以以MOVIE,#85H的形式表述,也可以MOV80H,#85H的形式表述。需要说明的是,直接寻址是访问特殊功能寄存器的惟一方法。
2.3 寄存器寻址
以通用寄存器的内容为操作数的寻址方式称为寄存器寻址。直接寻址和寄存器寻址的差别在于,直接寻址是操作数所在的字节地址(占一个字节),寄存器寻址是寄存器编码出现在指令码中。寄存器寻址速度比直接寻址要快。除上面所指的几个寄存器外,其它特殊功能寄存器一律为直接寻址。
例如:MOVA,R0;把寄存器R0的内容送入累加器A。
寄存器寻址方式的范围包括:
1)4个寄存器组共32个通用寄存器,但在指令中只能使用当前寄存器组。因此,在使用前要通过指定PSW中的Rs1、RS0,以选择当前寄存器组。
2)部分特殊功能寄存器。例如,累加器A、寄存器B以及数据指针DPTR。其中B寄存器仅在乘法、除法指令中为寄存器寻址,在其它指令中为直接寻址。A寄存器可以寄存器寻址,又可以直接寻址(此时写作ACC)。
2.4 寄存器间接寻址
以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。可以看出,在寄存器寻址方式中,寄存器中存放的是操作数;而在寄存器间接寻址方式中,寄存器中存放的则是操作数的地址,即寄存器为地址指针。这就是说,指令的操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。
寄存器间接寻址也需要以寄存器符号名称的形式表示。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址中,应在寄存器的名称前加前缀“@”。
例如:MOVA,@R0;把R0的内容作为地址的内容送入到累加器A。
寄存器间接寻址的寻址范围是:
1)片内RAM低128单元,这里只能使用R0,R1作为间址寄存器。其通用形式写为@Ri(i=0,1);
2)片外RAM64KB,使用DPTR作为间址寄存器,书写形式为@DPTR。
3)片外RAM低256单元。除可使用DPTR作为间址寄存器外还可以使用R0,R1作为间址寄存器。
4)堆栈区,堆栈操作指令(PUSH和POP)也属于寄存器间接寻址,即使用SP(堆栈指针)作为间址寄存器的间接寻址方式。
2.5 变址寻址
由寄存器DPTR或PC中的内容加上A累加器内容之和而形成操作数地址的寻址方式称为变址寻址。变址寻址只能对程序存储器中的数据进行寻址操作。由于程序存储器是只读存贮器,因此变址寻址只有读操作而无写操作。在指令符号上采用MOVC的形式。
例如:MOVCA,@A+DPTR;将DPTR和A的内容相加所得到的程序存储器地址单元的内存送累加器A。
变址寻址指令有如下特点:
1)变址寻址方式只能对程序存储器进行寻址。
2)变址寻址方式的指令只有三条: MOVCA,@A+DPTR;
MOVCA,@A+PC;
JMP@A+DPTR;
其中,前两条是程序存储器读指令,后一条是无条件转移指令。
3)尽管变址寻址方式复杂,但这三条指令都是单字节指令。
4)变址寻址方式可用于查表操作。
2.6 相对寻址
相对寻址是指在指令中给出的操作数为指令转移的偏移量。相对寻址方式是为实现程序的相对转移而设置的,为相对转移指令所采用。在相对转移指令中,给出地址偏移量(在51单片机系列的指令系统中,以“rel”表示)把PC的当前值加上偏移量就构成了程序转移目的地的地址。而PC的当前值是指执行完转移指令后的PC值,即转移指令的PC值加上它的字节数。因此,转移的目的地地址可用如下公式表示:
目的地地址=转移指令所在地地址+转移指令字节数+rel
在51单片机指令系统中,有许多条相对转移指令。这些指令多数均为两字节指令,只有个别的是三字节指令。偏移量rel是一个带符号的8位二进制补码数,所能表示数的范围是-128---+127。因此,相对转移指令的所在地址为基点,向前最大可转移(127+转移指令字节数)个单元地址,向后最大可转移(128-转移指令字节数)个单元地址。
例如:JC70H;该指令表示若进位位c为o,则程序计数器Pc中的内容不变,不转移;若C为1,则以PC中当前值为基地址,加上偏移量70H后所得结果作为该转移指令的目的地址。
2.7 位寻址
对位地址中的内容进行位操作的寻址方式称为位寻址。由于51单片机中只有内部RAM和特殊功能寄存器的部分单元有位地址,因此位寻址只能对有位地址的这两个空间进行寻址操作。位寻址是一种直接寻址方式,由指令给出直接位地址。与直接寻址不同的是,位寻址只给出位地址,而不是字节地址。
位寻址的范围:
1)片内RAM中的位寻址区
片内RAM中的单元地址为20H2FH,共16个单元128位,为位寻址区,位地址是00H~7FH。这128个位的寻址使用直接地址表示。
例如:MOVC,2BH;该指令的功能是把位寻址区的2BH位状态送给位C。
2)可位寻址的特殊功能寄存器位。
可位寻址的特殊功能寄存器有11个,对应寻址位共83位。对这些寻址位在指令中有以下4种表示方法:
① 直接使用位地址表示法。
② 单元地址加位的表示方法。例如,88H单元的位5,则表示为88H.5。
③ 特殊功能寄存器符号加位的表示方法。例如,psw寄存器的位5,可表示为psw.5。
④ 位名称表示方法,特殊功能寄存器中的一些寻址位是有名称的。例如,PSW寄存器位5为F0标志位,则可使用F0表示该位。
3 结语
本文主要介绍了比较简单和常用的80C51系列单片机的寻址方式,通过学习51系列单片机的寻址方式,进而了解和掌握单片机的工作原理和编写相应的程序,应用单片机于实际生活和工程中,改善和提高工作效率。
参考文献:
[1]趙晓安等编著,MCS-51单片机原理及应用,天津大学出版社.
[2]周兴华编著,手把手教你学单片机,北京航空航天大学出版社.
[3]周坚编著,单片机轻松入门,北京航空航天大学出版社.
关键词: 寻址方式;操作数;单片机
1 引言
指令的寻址方式MOVA,#20H这条指令,第一个词MOV是命令动词,也就是决定做什么事情的。MOV是英文单词“MOVE”少写了一个E,代表的含义是“传递或传送”,这就是指令,规定做什么事情,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是20H,而要送达的地方(目的地)就是A这个累加器。注意:源操作数、目的操作数都有各自的寻址方式,而这里所介绍的寻址方式是指目的操作数的寻址方式。在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。
2 8051单片机的7种寻址方式
2.1 立即寻址
指令中直接给出操作数的寻址方式称为立即数寻址。在51系列单片机指令系统中,为了与直接寻址指令中的直接地址相区别,立即数用前面加“#”号的8位数表示(#data,如#20H)或16位数(#data16,如#1000H)表示。举例说明立即数寻址方式,以传送指令为例。
例:MOVA,#20H;把8位立即数20H送入累加器A。
MOVDPTR,#1000H;把16位立即数1000H送入数据指针DPTR寄存器。
2.2 直接寻址
直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。
例如:MOVA,30H;把内部RAM30H单元的内容送入累加器A。
MOV30H,20H;把内部RAM20H单元的内容送入内部RAM30H单元。
在80C51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间,具体内容是:
1)内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。
2)位寻址区。20H-2FH地址单元。
3)特殊功能寄存器。专用寄存器除可以以单元地址形式给出外,还可以以寄存器符号形式给出。例如指令MOVIE,#85H。我们知道,中断允許寄存器IE的地址是80H,那么也就是这条指令可以以MOVIE,#85H的形式表述,也可以MOV80H,#85H的形式表述。需要说明的是,直接寻址是访问特殊功能寄存器的惟一方法。
2.3 寄存器寻址
以通用寄存器的内容为操作数的寻址方式称为寄存器寻址。直接寻址和寄存器寻址的差别在于,直接寻址是操作数所在的字节地址(占一个字节),寄存器寻址是寄存器编码出现在指令码中。寄存器寻址速度比直接寻址要快。除上面所指的几个寄存器外,其它特殊功能寄存器一律为直接寻址。
例如:MOVA,R0;把寄存器R0的内容送入累加器A。
寄存器寻址方式的范围包括:
1)4个寄存器组共32个通用寄存器,但在指令中只能使用当前寄存器组。因此,在使用前要通过指定PSW中的Rs1、RS0,以选择当前寄存器组。
2)部分特殊功能寄存器。例如,累加器A、寄存器B以及数据指针DPTR。其中B寄存器仅在乘法、除法指令中为寄存器寻址,在其它指令中为直接寻址。A寄存器可以寄存器寻址,又可以直接寻址(此时写作ACC)。
2.4 寄存器间接寻址
以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。可以看出,在寄存器寻址方式中,寄存器中存放的是操作数;而在寄存器间接寻址方式中,寄存器中存放的则是操作数的地址,即寄存器为地址指针。这就是说,指令的操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。
寄存器间接寻址也需要以寄存器符号名称的形式表示。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址中,应在寄存器的名称前加前缀“@”。
例如:MOVA,@R0;把R0的内容作为地址的内容送入到累加器A。
寄存器间接寻址的寻址范围是:
1)片内RAM低128单元,这里只能使用R0,R1作为间址寄存器。其通用形式写为@Ri(i=0,1);
2)片外RAM64KB,使用DPTR作为间址寄存器,书写形式为@DPTR。
3)片外RAM低256单元。除可使用DPTR作为间址寄存器外还可以使用R0,R1作为间址寄存器。
4)堆栈区,堆栈操作指令(PUSH和POP)也属于寄存器间接寻址,即使用SP(堆栈指针)作为间址寄存器的间接寻址方式。
2.5 变址寻址
由寄存器DPTR或PC中的内容加上A累加器内容之和而形成操作数地址的寻址方式称为变址寻址。变址寻址只能对程序存储器中的数据进行寻址操作。由于程序存储器是只读存贮器,因此变址寻址只有读操作而无写操作。在指令符号上采用MOVC的形式。
例如:MOVCA,@A+DPTR;将DPTR和A的内容相加所得到的程序存储器地址单元的内存送累加器A。
变址寻址指令有如下特点:
1)变址寻址方式只能对程序存储器进行寻址。
2)变址寻址方式的指令只有三条: MOVCA,@A+DPTR;
MOVCA,@A+PC;
JMP@A+DPTR;
其中,前两条是程序存储器读指令,后一条是无条件转移指令。
3)尽管变址寻址方式复杂,但这三条指令都是单字节指令。
4)变址寻址方式可用于查表操作。
2.6 相对寻址
相对寻址是指在指令中给出的操作数为指令转移的偏移量。相对寻址方式是为实现程序的相对转移而设置的,为相对转移指令所采用。在相对转移指令中,给出地址偏移量(在51单片机系列的指令系统中,以“rel”表示)把PC的当前值加上偏移量就构成了程序转移目的地的地址。而PC的当前值是指执行完转移指令后的PC值,即转移指令的PC值加上它的字节数。因此,转移的目的地地址可用如下公式表示:
目的地地址=转移指令所在地地址+转移指令字节数+rel
在51单片机指令系统中,有许多条相对转移指令。这些指令多数均为两字节指令,只有个别的是三字节指令。偏移量rel是一个带符号的8位二进制补码数,所能表示数的范围是-128---+127。因此,相对转移指令的所在地址为基点,向前最大可转移(127+转移指令字节数)个单元地址,向后最大可转移(128-转移指令字节数)个单元地址。
例如:JC70H;该指令表示若进位位c为o,则程序计数器Pc中的内容不变,不转移;若C为1,则以PC中当前值为基地址,加上偏移量70H后所得结果作为该转移指令的目的地址。
2.7 位寻址
对位地址中的内容进行位操作的寻址方式称为位寻址。由于51单片机中只有内部RAM和特殊功能寄存器的部分单元有位地址,因此位寻址只能对有位地址的这两个空间进行寻址操作。位寻址是一种直接寻址方式,由指令给出直接位地址。与直接寻址不同的是,位寻址只给出位地址,而不是字节地址。
位寻址的范围:
1)片内RAM中的位寻址区
片内RAM中的单元地址为20H2FH,共16个单元128位,为位寻址区,位地址是00H~7FH。这128个位的寻址使用直接地址表示。
例如:MOVC,2BH;该指令的功能是把位寻址区的2BH位状态送给位C。
2)可位寻址的特殊功能寄存器位。
可位寻址的特殊功能寄存器有11个,对应寻址位共83位。对这些寻址位在指令中有以下4种表示方法:
① 直接使用位地址表示法。
② 单元地址加位的表示方法。例如,88H单元的位5,则表示为88H.5。
③ 特殊功能寄存器符号加位的表示方法。例如,psw寄存器的位5,可表示为psw.5。
④ 位名称表示方法,特殊功能寄存器中的一些寻址位是有名称的。例如,PSW寄存器位5为F0标志位,则可使用F0表示该位。
3 结语
本文主要介绍了比较简单和常用的80C51系列单片机的寻址方式,通过学习51系列单片机的寻址方式,进而了解和掌握单片机的工作原理和编写相应的程序,应用单片机于实际生活和工程中,改善和提高工作效率。
参考文献:
[1]趙晓安等编著,MCS-51单片机原理及应用,天津大学出版社.
[2]周兴华编著,手把手教你学单片机,北京航空航天大学出版社.
[3]周坚编著,单片机轻松入门,北京航空航天大学出版社.