微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 什么是单片机寻址方式与指令系统

什么是单片机寻址方式与指令系统

时间:10-09 来源:互联网 点击:

通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051单片机的指令部份。

一、概述

1、指令的格式

寻址方式

指令的一个重要组成部分是操作数,由它指定参与运算的数据或数据所在的存储器单元或寄存器或I/O接口的地址。指令中所规定的寻找操作数的方式就是寻址方式。每一种计算都具有多种寻址方式,寻址方式越多,计算机的功能就越强,灵活性就越大。寻址方式的多少及寻址功能是反映指令系统优劣的主要因素之一。要掌握指令系统也可从寻址方式入手。

MCS-51指令系统的寻址方式有7种:立即寻址(#data)、寄存器寻址(Rn)、间接寻址(@Ri、@DPTR)直接寻址direct、变址寻址(A+)、相对寻址(rel)和特定寄存器寻址(A)。有些书把A当寄存器寻址,把位寻址单独作一种寻址方式,不管怎么分类其目的是为了便于记忆、掌握111条指令。

1.立即寻址(#data)

操作数包含在指令字节中,操作数直接出现在指令中,并存放在程序存储器中,这种方式称为立即寻址。

立即寻址指令的操作数是一个8位或16位的二进制常数,它前面以“#”号标识,例如:ADD A,#56H,即#56H与累加器A(设为31H)内容相加,结果(87H)存于累加器A中。这条指令的机器码为2456H.

2.寄存器寻址(Rn)

由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址。在这种寻址方式中,指令的操作码中包含了参加操作的工作寄存器R0~R7的代码(指令操作码字节的低3位指明所寻址的工作寄存器)。例如:ADD A,Rn中的Rn,当n为0、1、2时,机器码分别为28、29、2A.

3.间接寻址(@Ri/@DPTR)

由指令指出某一个寄存器内容作为操作数的地址。这种寻址方式称为寄存器间接寻址。访问外部RAM时,可使用R0,R1或DPTR作为地址指针,寄存器间接寻址用符号“@”表示。

例如:MOV A,@RO(机器码E7)是指:若RO内容为66(内部RAM地址单元66H),而66H单元中内容是27H,则指令的功能是将27H这个数送到累加器A.

4.直接寻址(direct)

在指令中直接给出操作数所在存储单元的地址(一个8位二进制数),称为直接寻址。直接地址用direct表示,

直接寻址方式中操作数存储的空间有三种:

(1).内部数据存储器的128个字节单元(00H~7FH)

(2).位地址空间(有些书把这种寻址方式单独作一种寻址方式)

(3).特殊功能寄存器, 特殊功能寄存器只能用直接寻址方式进行访问。

5.基址加变址寻址(@A+PC/@A+DPTR)

以16位寄存器(DPTR或PC)作为基址寄存器,加上地址偏移量(累加器A中的8位无符号数)形成操作数的地址。

变址寻址方式有两类:

(1).以程序计数器的值为基址例如指令:

MOVC A,@A+PC; ;(A)←((A)+(PC))

指令的功能是先使PC指向本指令下一条指令地址(本指令以完成),然后PC地址与累加器内容相加,形成变址寻址的单元地址内容送A。

(2).以数据指针DPTR为基址,以数据指针内容和累加器内容相加形成地址,例如:

MOV DPTR #4200H ;给DPTR赋值

MOV A,#10H ;给A赋值

MOVC A ,@A+DPTR ;变址寻址方式(A)←((A)+(DPTR))

三条指令的执行结果是将4210H单元内容送A中。

6.相对寻址(rel)

以程序计数器PC的当前值为基址,加上相对寻址指令的字节长度,再加上指令中给定的偏移量rel的值(rel是一个8位带符号数,用二进制补码表示),形成相对寻址的地址。

例如指令:

JNZ rel (或rel = 23H,机器码为7023)
当A≠0时,程序跳到这条指令后面,相差23个字节运行下一条指令。

7.特定寄存器寻址

累加器A和数据针DPTR这两个使用最频繁的寄存器又称为特殊寄存器。对特定寄存器的操作指令,指令不再需要指出其地址字节,指令码本身隐含了操作对象A或DPTR。

例如:

INC A (指令码04) ;累加器加1

MOV A,#12H (指令码7412) ;数12送累加器

INC DPTR (指令码A3) ;数据指针内容加1

综上所述,寻址方式与存储器结构有密切关系。一种寻址方式只适合于对一部分存储器进行操作,在使用时要加以注意。

我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,助记符格式,如MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。

2、汇编

我们写指令使用汇编格式,而计算机和

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

网站地图

Top