APP下载

简析80C51单片机的数据传送类指令

2020-01-08许一洲

通信电源技术 2020年9期
关键词:寄存器字节指令

许一洲

(西北民族大学 电气工程学院,甘肃 兰州730106)

0 引 言

80C51单片机指令系统共有111条指令,由操作码和操作数两部分构成[1]。这些指令包括数据传送类指令、算术运算类指令、逻辑运算类指令、控制转移类指令和位操作类指令[2]。其中,数据传送类指令在单片机中使用频繁,除了一般传送指令外,还有4类特殊传送指令。

1 一般传送类指令

一般传送类指令都是采用MOV操作符,可以分为16位传送和8位传送。

16位传送指令仅仅只有一条,功能是将源操作数data16送入目的操作数DPTR中,如:

MOV DPTR,#data16;

当源操作数data16为3456H时,执行以上操作后,(DPH)=34H,(DPL)=56H。这条指令一般用于给DPTR赋予ROM中的数据表的表头地址,也可以是某一片外RAM缓冲区的首地址或者是扩展的片外接口地址。

8位传送指令能够将源字节的内容拷贝至目的字节,且源字节的内容不会变化,属于字节传送。目的字节可以是累加器A、寄存器Rn或Ri、片内RAM单元地址及SFR地址direct。源字节中除了上述4类以外,8位立即数#data也可以作为源字节。以目的字节为准,将8位传送指令分成4类。

1.1 以累加器A为目的字节

以累加器A为目的操作数的指令使用最频繁,其指令可以构造成以下4种,如:

MOV A,Rn;

MOV A,direct;

MOV A,@Ri;

MOV A,#data;

累加器A作为目的字节,执行后源字节即可送入累加器A。

1.2 以Rn为目的

由于目的字节为工作寄存器,因此源字节不能采用工作寄存器及其间址方式寻址。它的指令有以下3种,如:

MOV Rn,A;

MOV Rn,direct;

MOV Rn,#data;

指令执行后,源字节即可送入到工作寄存器Rn中。

1.3 以direct为目的

由于direct也可以作为源字节(这里用direct1表示),因此其构造有5种方式,如:

MOV direct,A;

MOV direct,Rn;

MOV direct,direct1;

MOV direct,@Ri;

MOV direct,#data;

执行指令后,源字节即可送入direct中。

1.4 以@Ri为目的

由于目的字节采用寄存器间址,因此源字节不能采用寄存器及其间址寻址,如:

MOV @Ri,A;

MOV @Ri,direct;

MOV @Ri,data;

2 特殊传送指令

由于操作符不同,将其他不是MOV操作符指令称为特殊传送指令,如MOVC、MOVX、PUSH、POP、XCH、XCHD以及SWAP。可将这些特殊传送指令分为ROM查表、外部RAM读/写、堆栈操作和交换指令4种。

2.1 读取ROM中常数表的表项指令MOVC

ROM中通常存放两类内容:一是单片机执行的程序代码;二是固定不变的常数。因此,访问ROM实际上指的是读取ROM中的常数表的表项,简称查表,需经过累加器来完成。使用MOVC指令,可以由DPTR或PC内容为基址。

(1)以DPTR内容做基址时,如:

MOVC A,@A+DPTR;

需要注意,在执行指令时,需要使累加器A的内容与DPTR的内容16位无符号数相加,作为16位要访问的ROM地址,最后将该地址单元的内容送到累加器A中。例如,(DPTR)=3000H、(A)=40H时,最终结果A为3040H。

(2)以PC内容为基址时,如:

MOVC A,@A+PC;

执行该指令的时候,要注意PC内容会自动加1,然后与累加器A的16位无符号数相加,作为访问的16位ROM地址,最后送入累加器A。当上诉指令所在地址为1000H且(A)=30H时,执行后会将1031H单元内容送入累加器A。

2.2 读写片外RAM及接口单元数据的指令MOVX

单片机的片外RAM或接口会经常存放一些中间数据,在访问片外RAM或接口操作时可以有读和写两类,这时需要利用MOVX指令通过累加器来完成。

(1)做读操作时,可以将DPTR、R0或R1作为间址寻址器读片外RAM空间,如:

MOVX A,@DPTR;

MOVX A,@Ri;

若间址寄存器内容为3000H,(3000H)=30H,执行指令后(A)=30H。

(2)做写操作时,同样可将DPTR、R0或R1作为间址寄存器写外部RAM。与读操作的区别仅仅在于传输方向不同,如:

MOVX @DPTR,A

MOVX @Ri,A;

需要注意,片外扩展的I/O口也要通过MOVX进行数据输入输出。

2.3 堆栈指令PUSH和POP

堆栈是通过“后进先出”的原则在片内RAM中的一片存储区,固定的一端称为栈底,活动的一端称为栈顶,利用指针SP指向栈顶位置。

PUSH指令会先将SP的内容加1,之后将直接地址操作数送入SP所指的单元,如:

PUSH direct;

若(SP)=07H,(40H)=88H, 执 行“PUSH 40H”指令后,(SP)=08H,(08H)=88H。

POP指令是先将SP所指向的单元送入指令中的直接地址单元,然后再将SP内容减1,如:

POP direct;

若(SP)=5FH,(5FH)=90H, 执 行“POP 70H”指令后,(70H)=90H,(SP)=5EH。

2.4 数据交换指令XCH、XCHD和SWAP

MOV类指令传送只是将数据从源字节复制到目的字节的单向传送。当需要两字节或两半字节的双向交换时,需要利用数据交换指令,包括XCH、XCHD和SWAP。

(1)XCH作为字节交换指令,具有以下3种构造方式:

XCH A,Rn;

XCH A,direct;

XCH A,@Ri;

这3条指令均能实现操作数与累加器A内容的互换,如执行“XCH A,R0”,若(R0)=80H,(A)=20H,执行后(A)=80H,(R0)=20H。

(2)XCHD属于半字节交换,功能是间址操作数的低半字节与累加器A的低半字节内容互换如:

XCHD A,@Ri;

若(R0)=30H,(30H)=67H,(A)=20H,执行“XCHD A,@R0”指令后,(A)=27H,(30H)=60H。

(3)SWAP同样属于半字节交换,与XCHD不同的是,它是将累加器的高低4位互换,如:

SWAP A;

若(A)=31H,执行以上指令后,(A)=03H。

3 结 论

现阶段,单片机已被广泛运用于生产和生活中的各个领域。要熟练掌握单片机,必须要熟悉单片机的操作指令。数据交换指令是单片机操作指令的一个重要组成部分,对其深入学习,有助于进一步使用和发展单片机技术。

猜你喜欢

寄存器字节指令
No.8 字节跳动将推出独立出口电商APP
基于 Verilog HDL 的多周期 CPU 设计与实现
《单一形状固定循环指令G90车外圆仿真》教案设计
Lite寄存器模型的设计与实现
No.10 “字节跳动手机”要来了?
二进制翻译中动静结合的寄存器分配优化方法
轻量级分组密码Midori64的积分攻击
移位寄存器及算术运算应用
中断与跳转操作对指令串的影响
MAC指令推动制冷剂行业发展