微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机的寻址方式

51单片机的寻址方式

时间:11-19 来源:互联网 点击:
学习汇编程序设计,要先了解CPU的各种寻址法,才能有效的掌握各个命令的用途,寻址法是命令运算码找操作数的方法。

指令的寻址方式 MOV P1,#0FFH这条指令,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是“传递”,这就是指令,规定做什么事情,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。

寻址方式:指定操作数所在单元的方法。

注意:源操作数、目的操作数都有各自的寻址方式。 掌握指令的7种寻址方式的作用以及不同寻址方式所查询的存储空间及范围,对于常用的指令,能够给出指令的寻址方式。

在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。

一、立即寻址

所要找的操作数是一二进制数或十进制数,出现在指令中,用“#”作前缀

MOV A,#20H

在这种寻址方式中,指令多是双字节的,一般第一个字节是操作码,第二个字节是操作数。该操作数直接参与操作,所以又称立即数,有“#”号表示。立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。

例如:

MOV A,#3AH

这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。

MOV DPTR,#8200H

在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。

这里也特别说明一下:在80C51单片机的指令系统中,仅有一条指令的操作数是16位的立即数,其功能是向地址指针DPTR传送16位的地址,即把立即数的高8位送入DPH,低8位送入DPL。

二、直接寻址

指令中直接给出操作数的地址。

MOV A,30H

MOV 30H,DPH

直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。

例如:MOV A,30H

这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。

在80C51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间,具体的说就是:

1、内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。

我们知道低128单元的地址是00H-7FH。在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH形式给出。

2、位寻址区。20H-2FH地址单元。

3、特殊功能寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。例如下面我们分析的一条指令 MOV IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是这条指令可以以MOV IE,#85H 的形式表述,也可以MOV 80H,#85H的形式表述。

直接寻址是唯一能访问特殊功能寄存器的寻址方式!

大家来分析下面几条指令:

MOV 65H,A ;将A的内容送入内部RAM的65H单元地址中

MOV A,direct ;将直接地址单元的内容送入A中

MOV direct,direct;将直接地址单元的内容送直接地址单元

MOV IE,#85H ;将立即数85H送入中断允许寄存器IE

数据前面加了“#”的,表示后面的数是立即数(如#85H,就表示85H就是一个立即数),数据前面没有加“#”号的,就表示后面的是一个地址地址(如,MOV 65H,A这条指令的65H就是一个单元地址)。

三、寄存器寻址

操作数存放在工作寄存器R0 ~ R7中,或寄存器B中。

MOV A,R2

寄存器寻址的寻址范围是:

1、4个工作寄存器组共有32个通用寄存器,但在指令中只能使用当前寄存器组(工作寄存器组的选择在前面专用寄存器的学习中,我们已知道,是由程序状态字PSW中的RS1和RS0来确定的),因此在使用前常需要通过对PSW中的RS1、RS0位的状态设置,来进行对当前工作寄存器组的选择。

2、部份专用寄存器。例如,累加器A、通用寄存器B、地址寄存器DPTR和进位位CY。

寄存器寻址方式是指操作数在寄存器中,因此指定了寄存器名称就能得到操作数。

例如:MOV A,R0

这条指令的意思是把寄存器R0的内容传送到累加器A中,操作数就在R0中。

INC R3

这条指令的意思是把寄存器R3中的内容加1

寄存器寻址方式就是对由PSW程序状态字确定的工作寄存器组的R0-R7进行读/写操

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top