数据传送类指令
数据传送是单片机最基本的操作。数据传送的一般功能是将源操作数传送到指令所指定的目的操作数,指令执行后,源操作数不变。
数据传送类指令一般不影响标志位。数据传送类指令共29条,可以分为两大类。一是采用MOV操作符,称为一般传送指令,共16条;二是采用非MOV操作符,称为特殊传送指令,共13条。
一般传送指令的汇编指令格式为:
MOV是传送指令的操作助记符。其功能是将源操作数传送到目的操作数,源操作数内容不变。
该类指令的助记符,操作数,功能,字节数及执行时长(机器周期数),按目的操组数归类如下。
1)内部8位数据传送指令
内部RAM区是数据传送最活跃的区域,8位内部数据传送指令共15条,用于单片机内部的数据存储器和寄存器之间的数据传送。
有立即寻址,直接寻址,寄存器寻址及寄存器间接寻址等寻址方式。
2)16位数据传送指令
该指令是80C51指令集中唯一的一条16位数据传送指令,其作用是将外部存储器某单元地址送到数据指针DPTR。
这个存储单元可以是外部RAM也可以是外部ROM,也可以是扩展的片外接口地址。
如果地址传送到DPTR后用刀MOVC,则一定是ROM地址;用到的是MOVX,则一定是RAM地址或片外接口地址。
以上一般数据传送指令中,可以用4种目的字节为基础来构造4类指令。
使用时请注意:除direct外,源字节寻址与目的字节方式是不相同的;Rn寄存器寻址与寄存器间接寻址间不相互传送;只有以累加器A作为目的操作数的指令,才可能影响奇偶标志P。
3)特殊传送指令
特殊传送指令包括:ROM查表,读/写外部RAM,堆栈操作和交换指令,共13条。
ROM中常数读取指令
为了取出存放在程序存储器中的表格数据,80C51单片机提供了两条查表指令,这两条指令的操作码助记符为MOVC(move code),表示操作对象是程序存储器。
指令MOVC A, @A+PC 以PC为基址寄存器,A为变址寄存器,A中的8位无符号数与PC内容(该指令的吓一跳指令的起始地址)相加后得到一个16位ROM地址,然后将该地址单元的内容取出送累加器A。
指令MOVC A, @A+DPTR 以DPTR 为基址寄存器,A为变址寄存器,A中的8位无符号数与DPTR 内容相加后得到一个16位ROM地址,然后将该地址单元的内容取出送累加器A。
片外RAM的读/写指令
使用MOV类指令,内部RAM单元内容可以有很多种灵活的数据传送方式,而外部RAM数据的传送只能与A进行,且必须使用助记符为MOVX类的指令。
注意指令以Ri为间接寻址寄存器的,对外部RAM的寻址空间为256字节。而DPTR的寻址空间是整个64KB的片外RAM。
堆栈操作指令
堆栈操作是通过指令来完成的。将数据送入堆栈的过程称为压栈操作,而从堆栈中取出数据的过程称为弹出(出栈)操作。
压栈指令的功能是先将堆栈指针SP的内容加1,然后将指令指定的直接寻址单元内容传送至栈顶单元。
出栈指令的功能是将当前堆栈指针SP所指示的单元的内容传送到该指令指定的单元中,然后SP中的内容减1。
数据交换指令
数据传送都是源操作数传送到目的操作数,而源操作数不变,数据流是单方向的;数据交换类指令则是双方向的,源和目的操作数都会发送改变。
XCH 为字节交换,XCHD为半字节交换(仅交换低4位数据),SWAP是自交换(高4位与低4位交换)。
算术运算类指令
算术操作指令共有24条,可分为加减乘除和BCD码调整指令,除加1减1指令外,算术运算指令的执行结果都将影响CY,AC,OV标志。
1)不带进位加法指令及BCD码加法调整指令
前4条指令都是两个数相加后将结果送给A,参与运算的都是两个8位二进制数。
对于微型计算机作加法时,做的是纯正的二进制数相加,但对用户来说,这些8位的二进制数,可能是无符号数,有符号数的补码,还可能是BCD码。为此,微型计算机设计了若干个结果标志或调整指令供用户使用。
无符号数相加:若相加结果超8位,则CY为1,表示产生进位,否则CY为0。
有符号数相加:8位二进制数表示的十进制范围为-128~127,当相加结果不在这个范围时,OV为1,表示溢出。OV为1表示加法运算的结果不可用。
BCD码相加:若两个BCD数相加结果大于1001,则要加0110进行调整;若两个BCD数相加结果在本位上并不大与1001,但产生了进位,相当于计算结果大于9,那么也要加0110进行调整。调整指令用专用这指令DA A。
2)带进位加法指令
这4条指令是将累加器A中的值与源操作数以及进位CY中的值相加,结果送A。常用于多字节数的加法运算中。
需要注意的是这里的CY是指令开始执行时的进位标志位,不是相加后产生的。
3)加1指令
加法仍按无符号二进制数进行,只有INC A影响就标志P,其余指令不影响标志位。
4)带借位减法指令
这4条指令的操作是,将A与源操作数及进位标志相减,结果回送到A。
无符号数相减:CY为1表示D7位有错位,否则CY为0。CY为1就表示A < 源操作数。
有符号数相减:若OV为1,表明补码减法运算结果超出8位二进制数表示范围。
若要进行不带进位的减法运算,只要将CY清0即可。
5)减1指令
只有DEC A会影响奇偶标志P。
6)乘除指令
两个8位无符号数相乘结果为16位无符号数,乘积的低8位存放在A,高8位存放在寄存器B。
如果乘积超过0FFH,则OV为1,否则清零。CY总为0,P仍按A中1的奇偶来确定。
两个8位无符号数相除的商存放在A,余数存放在B。如果除数B为0,则OV为1。CY总为0,P仍按A中1的奇偶来确定。
逻辑运算类指令
逻辑运算指令共24条,包括逻辑与,或,异或,清零,取反,移位的指令。
1)逻辑与指令
2)逻辑或指令
3)逻辑异或指令
4)累加器清零指令
5)取反指令
6)移位指令
控制转移类指令
通常情况下,微机是顺序执行程序的,但在有些情况下需要改变程序的走向,控制转移类指令就是可以改变程序运行走向的指令。
80C51共16条,包括无条件转移指令,条件转移指令以及子程序调用和返回指令。
1)无条件转移指令
无条件转移指令是当程序执行该指令时,不需要任何条件,程序自动转移到该指令所指的目的地址运行新的程序段。
AJMP 为短转移指令,在译成机器码时,只取目的地址的低11位,高5位使用PC地址的高5位。很明显这是一条跳转范围为2KB的指令。
SJMP为相对转移指令,双字节指令,rel为有符号的补码,所以转移的目标地址在SJMP指令前126B到后129B之间。
LJMP为长转移指令,该指令可以使程序从当前地址转移到64KB程序存储器地址空间的任意地址。
JMP为散转移指令,该指令以DPTR和A的内容进行无符号相加后作为PC的新目标地址,可以实现64KB范围内的转移。该指令的特点是根据A的值不同实现多分支转移。
2)条件转移指令
条件转移指令是指在满足指定条件时就进行转移,否则程序继续执行本指令的下一条指令。条件转移指令都是相对转移。
JZ指令是当A的内容为0就转移,而JNZ相反。
CJNE指令比较转移指令,是对两个操作数进行比较,然后根据比较结果来决定是否转移到目的地址。若不相等就转移,相等就顺序执行。
CJNE指令影响CY标志位,若目的操作数大于源操作数,则CY为0,反之为1。
DJNZ指令为减1非零转移指令。对操作数减1,并保存结果,判断值是否为0,为0就往下执行,否则跳转。
3)调用及返回指令
ACALL和LCALL会将断点地址压栈,RET会将断点地址出栈,弹回PC。
RETI是从中断服务子程序返回的指令,在RET的功能基础上,它还要清除80C51单片机内部的中断优先级状态触发器,使得已申请的同级或较低级的中断申请可以得到响应。
布尔变量操作指令
布尔变量即开关量,是以位为基本单位来进行运算和操作的。80C51系统具有对位变量的处理能力,它有自己的累加器CY,称为位累加器,有自己的位存储空间,还有自己独立的运算处理硬件系统和软件指令系统,共17条。
为方便书写,指令中的C代表CY。
1)位传送指令
2)位置位指令
3)位运算指令
4)位控制转移指令
位控制转移指令都是条件转移指令,它是以CY或者位地址bit的内容作为是否转移的条件。
JC/JNC是当CY为1/0时转移的指令,该指令适用于比较两个操作数大小的分支转移。
JB/JBC/JNB是以位地址bit内容判断是否要转移的。JB/JBC当(bit)为1时转移,而JNB为当(bit)为0时转移。JBC还具有将该bit清零的功能。
NOP为空操作,只消耗时间。
评论
查看更多