单片机的指令系统

时间:2023-03-15作者:佚名
一、数据传送指令

数据传送指令主要负责把数据、地址或立即数传送到寄存器或存储单元中。这类指令共有29条,可分为以下3大类:基本数据传送指令,数据交换指令,栈操作指令。

执行数据传送指令时,除以累加器A为目的操作数的指令会对奇偶标志位P有影响外,其余指令执行时均不会影响任何标志位。

1. 基本数据传送指令

根据数据取自何方和传到何方,MOV指令有着许多不同的形式。

(1)以累加器A为目的操作数类指令

这组指令的作用是把源操作数指向的内容送到累加器A。有立即数、直接、寄存器和寄存器间接寻址方式:

MOV A, #data ; data→(A)

MOV A, direct ;(direct)→(A)

MOV A, Ri ;(Ri)→(A)

MOV A, @Rj ;((Rj))→(A)

(2) 以寄存器Ri为目的操作数的指令

这组指令的功能是把源操作数指定的内容送到所选定的工作寄存器Ri中。有立即、直接和寄存器寻址方式:

(3)以直接地址为目的操作数的指令

这组指令的功能是把源操作数指定的内容送到由直接地址direct所选定的片内RAM中。有立即、直接、寄存器和寄存器间接4种寻址方式:

(4)以间接地址为目的操作数的指令

这组指令的功能是把源操作数指定的内容送到以Rj中的内容为地址的片内RAM中。有立即、直接和寄存器3种寻址方式

(5) 查表指令

这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:

MOVC A, @A DPTR ;((A) (DPTR))→(A)

MOVC A, @A PC ;((PC)) 1→(PC),((A) (PC))→(A)

(6) 累加器A与片外数据存储器RAM传送指令

这组指令的作用是累加器A与片外RAM间的数据传送。使用寄存器寻址方式:

MOVX @DPTR, A ;(A)→((DPTR))

MOVX A, @DPTR ;((DPTR))→(A)

MOVX A, @Rj ;((Rj))→(A)

MOVX @Rj,A ;(A)→((Rj))

(7)16位数据传送指令

这条指令的功能是把16位常数送入数据指针寄存器。

MOV DPTR, #data16 ; dataH→(DPH),dataL→(DPL)

2. 交换指令

MOV指令主要完成从一处到另一处的拷贝,XCH指令则可实现数据的双向传送。所有的操作都涉及到累加器A,可以把把累加器A中的内容与源操作数所指的数据相互交换。

XCH A, direct ;(A)←→(direct)

XCH A, Ri ;(A)←→(Ri)

XCH A, @Rj ;(A)←→((Rj))

XCHD A, @Rj ;(A3-0)←→((Rj)3-0)

SWAP A ;(A3-0)←→(A7-4)

3. 入栈/出栈指令

这类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。

⑴ PUSH指令

堆栈的入栈指令,该指令可以把某片内RAM单元(低128字节)或某专用寄存器的内容入栈。

PUSH direct ;(SP) 1→(SP),(direct)→(SP)

⑵ POP指令

堆栈的出栈指令,该指令用于恢复某片内RAM单元(低128字节)或某专用寄存器的内容。

POP direct ;(SP)→(direct),(SP)-1→(SP)

二、算术运算指令

在51系列单片机的指令系统中,提供了完备的加、减、乘、除算术运算指令及增量(加1)、减量(减1)运算,可处理不带符号或带符号的8/16二进制数。除加1和减1指令外,算术运算指令会影响进位、半进位和溢出位三个标志位。

1. 不带进位的加法指令

这组指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。

ADD A, #data ;(A) data→(A)

ADD A, direct ;(A) (direct)→(A)

ADD A, Ri ;(A) (Ri)→(A)

ADD A, @Rj ;(A) ((Rj))→(A)

本组指令的执行将影响标志位AC、CY、OV、P。当和的第3、7位有进位时,分别将AC,CY标志位置位;否则复位。对于无符号数,进位标志位CY=1,表示溢出;CY=0表示无溢出。带符号数运算的溢出取决于第6、7位,若这2位中有一位产生进位,而另一位不产生进位,则溢出标志位OV置位,否则被复位。

2. 带进位加法指令

这组指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容以及进位位C相加,运算结果存在A中。

本组指令执行对标志位AC、CY、OV、P的影响与ADD指令相同。

3. 增量指令

这组指令的的功能均为原寄存器的内容加1,结果送回原寄存器。这组指令共有直接、寄存器、寄存器间接寻址等寻址方式:

INC A ;(A) 1→(A)

INC direct ;(direct) 1→(direct)

INC Ri ;(Rn) 1→(Ri)

INC @Rj ;((Rj)) 1→((Rj))

INC DPTR ;(DPTR) 1→(DPTR)

增量指令不会对任何标志有影响。

4. 带借位减法指令

这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器A连同借位位C内容相减,结果送回累加器A中。

SUBB A, #data ;(A)- data -(C)→(A)

SUBB A, direct ;(A)-(direct) - (C)→(A)

SUBB A, Ri ;(A)-(Ri) -(C)→(A)

SUBB A, @Rj ;(A)-((Rj)) -(C)→(A)

本指令执行将影响标志位AC、CY、OV、P。若第七位有借位,则将CY置位,否则CY复位。若第3位有错位,则置位辅助进位标志AC,否则 AC复位。若第7和第6位中有一位需借位,而另一位不借位,则置位溢出标志OV。

当在进行单字节或多字节减法前,不知道进位标志位CY的值,则应在减法指令前先将CY复位清“0”。

5. 减量指令

这组指令的作用是把所指的寄存器内容减1,结果送回原寄存器,这组指令共有直接、寄存器、寄存器间接寻址等寻址方式:

DEC A ;(A)-1→(A)

DEC direct ;(direct)-1→(direct)

DEC Ri ;(Ri)-1→(Ri)

DEC @Rj ;((Rj))-1→((Rj))

运算结果不影响任何标志位。

6. 乘法指令

这条指令的作用是把累加器A和寄存器B中的8位无符号数相乘,所得到的是16位乘积,这个结果低8位存在累加器A,而高8位存在寄存器B中。

MUL AB ;(A)×(B)→(B)和(A)

乘法指令需要4个机器周期。

如果乘积大于255(0FFH),即B的内容不为0时,则置位溢出标志位OV,否则OV复位。进位标志位CY总是复位为0。

7. 除法指令

这条指令的作用是把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。

DIV AB ;(A)÷(B)→(A)和(B)

除法指令需要4个机器周期。

本指令总是将CY和OV标志位复位。当除数(B中内容)为00H时,那么执行结果将为不定值,则置位溢出标志位OV。

8. 十进制调整指令

在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。

DA A

三、逻辑运算指令

在51系列单片机的指令系统中提供的逻辑运算指令主要包括ANL(与),ORL(或),XRL(异或)等指令。

1. 逻辑与指令ANL

这组指令的功能是在指出的变量之间以位为基础的逻辑与操作。操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式:

ANL A, #data ;(A)∧ data →(A)

ANL A, direct ;(A)∧ (direct) →(A)

ANL A, Ri ;(A)∧ (Ri)→(A)

ANL A, @Rj ;(A)∧ ((Rj))→(A)

ANL direct, #data ;(direct)∧ data →(direct)

ANL direct, A ;(direct)∧ (A) →(A)

2. 逻辑或指令ORL

这组指令的功能是在所指出的变量之间执行以位为基础的逻辑或操作,结果存到目的变量中去。操作数有立即寻址、直接寻址、寄存器寻址和寄存器间接寻址方式:

3. 逻辑异或指令XRL

这组指令的功能是在所指出的变量之间执行以位为基础的逻辑异或操作,结果存放到目的变量中去。操作数有立即寻址、直接寻址、寄存器寻址和寄存器间接寻址方式:

4. 循环移位指令

这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一起移位。

RL A ; 累加器A中的内容左移一位。

RR A ; 累加器A中的内容右移一位。

RLC A ; 累加器A中的内容连同进位位CY左移一位。

RRC A ; 累加器A中的内容连同进位位CY右移一位。

5. 求反指令

这条指令将累加器中的内容按位取反。

CPL A ; 累加器中的内容按位取反。

6. 清零指令

这条指令将累加器中的内容清0。

CLR A ; 0→(A),累加器中的内容清0。

四、位操作类指令

MCS-51单片机内部有一个布尔处理机,对位地址空间具有丰富的位操作指令。

1. 位传送指令

这2条指令的功能是把由源操作数指出的布尔变量送到目的操作数指定的位中去。其中一个操作数必须为进位标志,另一个可以是任何直接寻址位。

MOV C, bit ; bit→CY,某位数据送CY。

MOV bit, C ; CY→bit,CY数据送某位。

本组指令不影响其他寄存器和标志位。

2. 位变量修改指令

这些指令对CY及可寻址位进行置位或复位操作

CLR C ; 0→CY,复位CY。

CLR bit ; 0→bit,复位某一位。

SETB C ; 1→CY,置位CY。

SETB bit ; 1→bit,置位某一位。

本组指令不影响其他标志。

3. 位变量逻辑指令

位运算都是逻辑运算,有与、或、非三种指令

ANL C,bit ; (CY)∧(bit)→CY

ANL C, /bit ; (CY)∧(单片机的指令系统)→CY

ORL C,bit ; (CY)∨(bit)→CY

ORL C,/bit ; (CY)∧(单片机的指令系统)→CY

CPL C ; (单片机的指令系统)→CY

CPL bit ; (单片机的指令系统)→bit

4. 位变量条件转移指令

位变量条件转移指令是以位的状态作为实现程序转移的判断条件:

JC rel ; (CY)=1转移,(PC) 2 rel→PC,否则程序往下执行,(PC) 2→PC。

JNC rel ; (CY)=0转移,(PC) 2 rel→PC,否则程序往下执行,(PC) 2→PC。

JB bit, rel ;位状态为1转移。

JNB bit, rel ;位状态为0转移。

JBC bit, rel ;位状态为1转移,并使该位清“0”。

五、控制转移指令

一般情况下指令是顺序执行的逐条执行的,但实际上程序不可能全部顺序执行而经常需要改变程序的执行流程,常用的控制转移指令有:

1. 无条件转移指令

这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。

LJMP addr16 ; addr16→(PC)

AJMP addr11 ;(PC) 2→(PC),addr11→(PC10-0)

SJMP rel ;(PC) 2 rel→(PC)

JMP @A DPTR ;(A) (DPTR)→(PC)

2. 条件转移指令

条件转移指令是依某种特定条件转移的指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面的指令。目的地址在下一条指令的起始地址为中心的256个字节范围中(-128~ 127)。当条件满足时,先把PC指向指向下一条指令的第一个字节地址,再把有符号的相对偏移量加到PC上,计算出转向地址。

JZ rel ; A=0,(PC) 2 rel→(PC)

JNZ rel ; A≠0,(PC) 2 rel→(PC)

3. 比较不相等转移指令

这组指令的功能是比较前面两个操作数的大小。如果它们的值不相等则转移。在PC指向下一条指令的起始地址后,通过把指令最后一个字节的有符号的相对偏移量加到PC上,并计算出转向地址。操作数有寄存器寻址、直接寻址,寄存器间接寻址和立即寻址等方式。

CJNE A, direct, rel ; A≠(direct),(PC) 3 rel→(PC)

CJNE A, #data, rel ; A≠data,(PC) 3 rel→(PC)

CJNE Ri, #data, rel ; A≠data,(PC) 3 rel→(PC)

CJNE @Rj, #data, rel ; A≠data,(PC) 3 rel→(PC)

4. 减1不为0转移指令

这组指令把源操作数减1,结果回送到源操作数中去,如果结果不为0则转移,跳到标号rel处执行,等于0就执行下一条指令。源操作数有寄存器寻址和直接寻址方式。该指令通常用于实现循环计数。

DJNZ Ri, rel ;(Ri)-1→(Ri),(Ri)≠0,(PC) 2 rel→(PC)

DJNZ direct, rel ;(direct)-1→(direct),(direct)≠0,(PC) 2 rel→(PC)

5. 子程序返回指令

编程时一般都把需要反复执行的一些程序编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。

LCALL addr16 ;长调用指令,可在64kB空间调用子程序。此时(PC) 3→(PC),(SP) 1→(SP),(PC7-0)→(SP),(SP) 1→(SP),(PC15-8)→(SP),addr16→(PC),即分别从堆栈中弹出调用子程序时压入的返回地址。

ACALL addr11 ;绝对调用指令,可在2kB空间调用子程序,此时(PC) 2→(PC),(SP) 1→(SP),(PC7-0)→(SP),(SP) 1→(SP),(PC15-8)→(SP),addr11→(PC10-0)。

RET ; 子程序返回指令。此时(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP)RET指令通常安排在子程序的末尾,使程序能从子程序返回到主程序。

RETI ; 中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代替 。

空操作也是CPU控制指令,它没有使程序转移的功能,一般用于软件延时。指令为:NOP

相关阅读

采用驱动IC和NMOS的防反电路设计

SCD----PMOS防反电路设计 引言:无论是常规的低侧NMOS防反接电路还是高侧的PMOS防反接电路均有其局限性。本节简述采用驱动IC加NMOS的方案做防反电路的设计及其优点。 1高边NMOS防反 PMO...
2023-06-28
采用驱动IC和NMOS的防反电路设计

最近水电工和电工都在传的一段话,说到骨子深处了

身背行李和工具, 离开家人去工地 干的手脖直发酸。 热的见水就想干。 再苦再累没人疼。 手拿钳子玩一天, 不是这跑就那颠。 别人羡慕手艺高, 谁知我心泪淘淘。 上高害怕也得去...
2023-06-11
最近水电工和电工都在传的一段话,说到骨子深处了

贴片电容焊接注意事项

贴片电容(MLCC)作为电子电路中最常用的元件之一,看起来很简单,但在实际应用中,设计工程师、生产人员和工艺人员对MLCC的认识存在不足之处。有些公司在MLCC的应用上存在误区,...
2023-08-09
贴片电容焊接注意事项

0-30V/5A可调对称电源电路图

在下面的方案图中,我们展示了一款0-30V / 5A可调对称电源,可以覆盖实验室或车间的广泛应用。值包含在设计图中。 电位器 P1 和 P2 用于将每个调节器输出独立调节至 0 至 30V 范围内的...
2023-08-01
0-30V/5A可调对称电源电路图

伺服电机安装使用注意事项

一、伺服电机 油和水的保护 A:伺服电机可以用在会受水或油滴侵袭的场所,但是它不是全防水或防油的。因此,伺服电机不应当放置或使用在水中或油侵的环境中。 B:如果伺服电机...
2023-03-21

热销商品

手术衣一次性防护服打农药防尘实验服参观服加厚透气无纺布隔离衣

手术衣一次性防护服,作为一种重要的医疗防护用品,广泛应用于医院、实验室等场所。它采用加厚透气无纺布制成,具有优良的防尘、防污、防病毒能力,能有效保护医护人员免...
14

欧普照明led灯泡e27/e14大小螺口超亮家用节能灯螺旋暖白光球泡

欧普照明LED灯泡,适用于E27和E14两种常见螺口,是您家用照明的理想选择。这款灯泡采用先进LED技术,亮度超群,瞬间点亮,无需等待,为您提供明亮舒适的光环境。同时,它节能环...
3.59

LED柜内照明灯 AC220V 4W 7W配电箱导轨式 LL10-W 高压柜内照明灯

LED柜内照明灯AC220V 4W/7W配电箱导轨式LL10-W是一款专为高压柜、配电箱等封闭电气设备设计的紧凑型照明产品。采用高效LED光源,功耗低(4W/7W可选),亮度高,寿命长,节能...
7

密封胶条包邮耐磨耐高温耐腐蚀圆柱棒丁晴/氟胶实心硅胶胶条红色

本品采用优质丁腈橡胶(NBR)或氟橡胶(FKM)及实心硅胶材质制成,呈红色圆柱棒状,具备卓越的耐磨、耐高温(-40℃至+200℃以上,氟胶可达250℃)、耐腐蚀性能,适用于酸、碱、油类等...
1

小木锤木锤子实木木榔头圆头木锤实木棰木头锤子木柄锤黄檀手工锤

小木锤采用优质黄檀木精心打造,通体实木结构,质地坚硬、纹理细腻,手感温润舒适。圆头设计兼顾敲击与整形功能,适用于木工、雕刻、家具组装及日常维修等场景。木柄经精...
3.4

网站栏目