11课单片机算术运算指令
- 格式:doc
- 大小:31.50 KB
- 文档页数:6
格式功能简述字节数周期一、数据传送类指令MOV A, Rn 寄存器送累加器 1 1MOV Rn,A 累加器送寄存器 1 1MOV A ,@Ri 内部RAM单元送累加器 1 1MOV @Ri ,A 累加器送内部RAM单元 1 1MOV A ,#data 立即数送累加器 2 1MOV A ,direct 直接寻址单元送累加器 2 1MOV direct ,A 累加器送直接寻址单元 2 1MOV Rn,#data 立即数送寄存器 2 1MOV direct ,#data 立即数送直接寻址单元 3 2MOV @Ri ,#data 立即数送内部RAM单元 2 1MOV direct ,Rn 寄存器送直接寻址单元 2 2MOV Rn ,direct 直接寻址单元送寄存器 2 2MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2二、算术运算类指令ADD A, Rn 累加器加寄存器 1 1ADD A,@Ri 累加器加内部RAM单元 1 1ADD A, direct 累加器加直接寻址单元 2 1ADD A, #data 累加器加立即数 2 1ADDC A, Rn 累加器加寄存器和进位标志 1 1 ADDC A,@Ri 累加器加内部RAM单元和进位标志 1 1 ADDC A, #data 累加器加立即数和进位标志 2 1 ADDC A, direct 累加器加直接寻址单元和进位标志 2 1 INC A 累加器加1 1 1INC Rn 寄存器加1 1 1INC direct 直接寻址单元加1 2 1INC @Ri 内部RAM单元加1 1 1INC DPTR 数据指针加1 1 2DA A 十进制调整 1 1SUBB A, Rn 累加器减寄存器和进位标志 1 1 SUBB A,@Ri 累加器减内部RAM单元和进位标志 1 1 SUBB A, #data 累加器减立即数和进位标志 2 1 SUBB A, direct 累加器减直接寻址单元和进位标志 2 1 DEC A 累加器减1 1 1DEC Rn 寄存器减1 1 1DEC @Ri 内部RAM单元减1 1 1DEC direct 直接寻址单元减1 2 1MUL AB 累加器乘寄存器B 1 4DIV AB 累加器除以寄存器B 1 4三、逻辑运算类指令ANL A, Rn 累加器与寄存器 1 1ANL A,@Ri 累加器与内部RAM单元 1 1ANL A, #data 累加器与立即数 2 1ANL A, direct 累加器与直接寻址单元 2 1ANL direct, A 直接寻址单元与累加器 2 1ANL direct, #data 直接寻址单元与立即数 3 1ORL A, Rn 累加器或寄存器 1 1ORL A,@Ri 累加器或内部RAM单元 1 1ORL A,#data 累加器或立即数 2 1ORL A,direct 累加器或直接寻址单元 2 1ORL direct, A 直接寻址单元或累加器 2 1ORL direct, #data 直接寻址单元或立即数 3 1XRL A, Rn 累加器异或寄存器 1 1XRL A,@Ri 累加器异或内部RAM单元 1 1XRL A,#data 累加器异或立即数 2 1XRL A,direct 累加器异或直接寻址单元 2 1XRL direct, A 直接寻址单元异或累加器 2 1XRL direct, #data 直接寻址单元异或立即数 3 2RL A 累加器左循环移位 1 1RLC A 累加器连进位标志左循环移位 1 1 RR A 累加器右循环移位 1 1RRC A 累加器连进位标志右循环移位 1 1 CPL A 累加器取反 1 1CLR A 累加器清零 1 1四、控制转移类指令类ACCALL addr11 2KB 范围内绝对调用 2 2AJMP addr11 2KB 范围内绝对转移 2 2LCALL addr16 2KB 范围内长调用 3 2LJMP addr16 2KB 范围内长转移 3 2SJMP rel 相对短转移 2 2JMP @A+DPTR 相对长转移 1 2RET 子程序返回 1 2RET1 中断返回 1 2JZ rel 累加器为零转移 2 2JNZ rel 累加器非零转移 2 2CJNE A ,#data ,rel 累加器与立即数不等转移 3 2CJNE A ,direct ,rel 累加器与直接寻址单元不等转移 3 2 CJNE Rn,#data ,rel 寄存器与立即数不等转移 3 2CJNE @Ri ,#data,rel RAM 单元与立即数不等转移 3 2DJNZ Rn ,rel 寄存器减1不为零转移 2 2DJNZ direct ,rel 直接寻址单元减1不为零转移 3 2 NOP 空操作 1 1五、布尔操作类指令MOV C, bit 直接寻址位送C 2 1MOV bit, C C 送直接寻址位 2 1CLR C C 清零 1 1CLR bit 直接寻址位清零 2 1CPL C C 取反 1 1CPL bit 直接寻址位取反 2 1SETB C C 置位 1 1SETB bit 直接寻址位置位 2 1ANL C, bit C 逻辑与直接寻址位 2 2ANL C, /bit C 逻辑与直接寻址位的反 2 2ORL C, bit C 逻辑或直接寻址位 2 2ORL C, /bit C 逻辑或直接寻址位的反 2 2JC rel C为1 转移 2 2JNC rel C为零转移 2 2JB bit,rel 直接寻址位为1转移 3 2JNB bit,rel 直接寻址为0转移1、D1~D8八个彩灯按规定顺序依次点亮(间隔1秒),最后全亮;2、按规定顺序依次熄灭(间隔1秒),最后全灭;3、八个灯同时点亮,保持1秒;4、八个灯同时熄灭,保持0.5秒;再将第3、4步重复4遍,最后整个程序再重复N遍。
按功能分为五大类:(1)数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX(Move External RAM)对外部RAM的数据传送;XCH(Exchange)字节交换;XCHD(Exchange low-order Digit)低半字节交换;PUSH(Push onto Stack)入栈;POP (Pop from Stack)出栈;(2)算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;(3)逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC(Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap)低4位与高4位交换;(4)控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation)空操作;(5)位操作指令(1种助记符)SETB(Set Bit)。
目录表1 寻址方式与相应的寻址空间 (2)1.1数据传送指令MOV (2)1.2程序存储器取数据指令MOVX,MOVC (3)1.3 数据交换指令XCH,XCHD,SWAP (3)1.4 逻辑运算指令ANL,ORL(按位进行) (4)续表1.4 逻辑运算指令XRL CLR CPL RL RLC RR RRC(按位进行) (5)1.5 控制转移指令LJMP AJMP SJMP JMP JZ JNZ CJNE (6)续表1.5 控制转移指令DJNZ LCALL ACALL RET RETI NOP (7)1.6 布尔处理(位操作)指令CLR SETB CPL ANL ORL (8)续表1.6 布尔处理(位操作)指令JC JNC JB JNB JBC (9)1.7堆栈操作指令PUSH POP (10)2.MCS-51系列单片机算术运算指令表ADD ADDC SUBB INC DEC MUL DIV DA (10)表1 寻址方式与相应的寻址空间1.1数据传送指令MOV方式 利用的变量 使用的空间寄存器 R0∽R7,A ,B ,CY ,DPTR直接寻址 direct片内RAM 低128字节特殊功能寄存器SFR寄存器间址 @Ro ,@R1 SP @R0,@R1,@DPTR片内RAM 片外RAM立即数 #data程序存储器 基址加变址 @A+PC @A+DPTR程序存储器 相对寻址 PC+rel程序存储器位寻址bit片内RAM 的20H ∽2FH 部分SFR目的操作数汇编指令机器码功能字节数 机器周期A 累加器 立即数送AMOV A ,#data 74H data data 传至A 2 1 内部RAM 或SFR 内容送AMOV A ,direct E5H direct(direct)传至A2 1 寄存器内容送AMOV A ,Rn (n=0∽7) E8H ∽EFH 11101rrr (Rn)传至A 1 1 内部RAM 内容送A MOV A ,@Ri (i=0,1) 1110011i((Ri))传至A 1 1 Direct内部RAM 或SFR立即数送内部RAM 或SFR MOV direct ,#data 75H direct data data 传至direct 3 2 内部RAM 和SFR 直接直接传送 MOV direct ,direct 85H direct direct (direct)传至direct 3 2 累加器内容送内部RAM 或SFR MOV direct ,AF5H direct(A)传至direct 2 1 寄存器内容送内部RAM 或SFR MOV direct ,Rn (n=0∽7) 10001rrr direct (Rn)传至direct 2 2 内部RAM 内容送内部RAM 或SFRMOV direct ,@Ri (i=0,1) 1000011i direct ((Ri))传至direct 2 2 Rn 寄存器立即数送寄存器 MOV Rn,#data (n=0∽7) 01111rrr data data 传至Rn 2 1 内部RAM 或SFR 内容送寄存器MOV Rn,direct (n=0∽7) 10101rrr direct (direct)传至Rn 2 2 累加器内容送寄存器MOV Rn,A (n=0∽7) 11111rrr (A)传至Rn 1 2 @Ri 内部RAM立即数送内部RAMMOV @Ri,#data (i=0,1) 0111011i data data 传至(Ri) 2 1 内部RAM 或SFR 内容送内部RAMMOV @Ri,direct (i=0,1) 1010011i direct (direct)传至(Ri) 2 2 累加器内容送内部RAM MOV @Ri,A (i=0,1) 1111011i(A)传至(Ri) 1 1 DPTR 16位立即数传送指令MOV DPTR,#data1690H dataH dataLdata16传至DPTR321.2程序存储器取数据指令MOVX ,MOVC1.3 数据交换指令XCH ,XCHD ,SWAP目的操作数汇编指令机器码功能字节数 机器周期A 外部数据存储器内容送A MOVX A ,@Ri (i=0,1) E2H E3H ((Ri))传至A 1 2 A 外部数据存储器内容送A MOVX A ,@DPTR E0H ((DPTR))传至A 1 2 @Ri 累加器内容送外部数据存储器 MOVX @Ri,A (i=0,1) F2H ,F3H A 传至(Ri) 1 2 DPTR 累加器内容送外部数据存储器 MOVX @DPTR,A F0H A 传至(DPTR) 1 2 A 以PC 为基址寄存器加变址寻址 MOVC A,@A+PC 83H ((A)+(PC))传至A 1 2 A以DPTR 为基址寄存器加变址寻址MOVC A,@A+DPTR93H((A)+(DPTR))传至A12目的操作数指令机器码 功能字节数 机器周期 A 内部RAM 或SFR 内容与累加器内容互换 XCH A,directC5H direct (A)←(direct) 2 1 A 寄存器内容与累加器内容互换 XCH A,Rn (n=1-7) 11001rrr (A)←(Rn) 1 1 A 内部RAM 内容与累加器内容互换XCH A,@Ri (i=0,1) 1100011i (A)←((Ri))1 1 A 内部RAM 低4位内容与累加器低4位内容互换XCHD A,@Ri (i=0,1) 1101011i (A)0∽3←((Ri))0∽3 1 1 A累加器高4位与低4位交换SWAP AC4H(A)0∽3←(A)4∽7111.4 逻辑运算指令ANL,ORL(按位进行)目的操作数指令机器码功能字节数机器周期逻辑与ANLA内容∧立即数ANL A ,#data54H A←(A)∧#data 2 1 A内容∧内部RAM或SFR当direct为端口地址P0∽P3时,操作数由端口锁存器读入。
51单片机指令表汇总51 单片机是一种广泛应用于电子工程和嵌入式系统开发的微控制器。
要熟练掌握 51 单片机的编程,了解其指令表是至关重要的。
下面就为大家汇总一下 51 单片机的常见指令。
数据传送类指令MOV 指令:这是最基本的数据传送指令,用于在寄存器之间、寄存器与存储器之间传送数据。
例如,“MOV A, 50H”就是将立即数 50H传送到累加器 A 中。
MOVX 指令:用于在片外数据存储器和累加器 A 之间进行数据传送。
比如“MOVX A, @DPTR”,将片外数据存储器中由数据指针 DPTR 所指定单元的内容传送到累加器 A 中。
MOVC 指令:用于访问程序存储器中的数据表格。
“MOVC A, @A+DPTR”是常见的用法。
算术运算类指令ADD 指令:实现加法运算。
像“ADD A, R0”就是将累加器 A 的内容和寄存器 R0 的内容相加,结果存放在累加器 A 中。
ADDC 指令:带进位加法指令。
考虑了上一次运算产生的进位标志。
SUBB 指令:用于减法运算,并且会考虑借位标志。
逻辑运算类指令ANL 指令:进行逻辑与操作。
例如“ANL A, R0”,将累加器 A 和寄存器 R0 的内容进行逻辑与运算,结果存放在累加器 A 中。
ORL 指令:执行逻辑或操作。
XRL 指令:实现逻辑异或运算。
控制转移类指令JC 指令:若进位标志为 1 则跳转。
JZ 指令:若累加器 A 的内容为 0 则跳转。
LJMP 指令:长跳转指令,可以跳转到 64KB 程序存储器空间的任意位置。
位操作类指令SETB 指令:将指定的位设置为 1。
例如“SETB P10”,将 P1 端口的第 0 位置 1。
CLR 指令:把指定的位清零。
这些只是 51 单片机指令的一部分,实际应用中还有更多的指令和组合使用方式。
在编程时,合理选择和运用这些指令能够实现各种复杂的功能。
比如,通过数据传送指令来初始化变量和读取外部数据;利用算术运算指令进行数值计算;借助逻辑运算指令处理逻辑关系;使用控制转移指令实现程序的分支和循环;运用位操作指令控制单个引脚的状态。
单片机add指令全文共四篇示例,供读者参考第一篇示例:单片机是一种广泛应用于电子产品中的微型计算机芯片,它被用来控制各种各样的设备和系统。
在单片机的指令集中,有一种常用的指令叫做“add指令”,它的作用是将两个数据相加并将结果存储到指定的寄存器中。
在本文中,我们将详细介绍add指令的工作原理、应用场景和一些注意事项。
一、add指令的工作原理在单片机的指令集中,add指令是一种基本的算术运算指令,它主要用来执行加法运算。
add指令通常包含两个操作数:一个是要相加的数据,另一个是存储结果的目标寄存器。
当执行add指令时,单片机将两个操作数相加,并将结果存储到目标寄存器中。
假设我们有两个数据A和B,我们想要将它们相加并将结果存储到寄存器R中,那么我们可以使用add指令来实现这个功能。
add指令的具体操作步骤如下:1. 将数据A加载到一个寄存器中(例如寄存器A);2. 将数据B加载到另一个寄存器中(例如寄存器B);3. 执行add指令,将寄存器A和寄存器B中的数据相加,并将结果存储到目标寄存器R中。
通过这样的操作,我们就可以实现将两个数据相加的功能。
add 指令在单片机中被广泛应用于各种算术运算和逻辑运算中,是非常基础和重要的指令之一。
二、add指令的应用场景除了简单的加法运算,add指令还可以用来执行更复杂的算术运算,比如乘法、除法和高精度运算等。
通过组合多条add指令,我们可以实现更复杂的数学运算,从而满足程序的需求。
在实际应用中,add指令还常常用来处理传感器数据、控制执行器、进行数据传输和通信等。
通过add指令,单片机可以实现各种功能,提高系统的性能和灵活性。
三、add指令的注意事项尽管add指令是一种简单的算术运算指令,但在实际应用中仍需要注意一些事项,以确保程序的正确运行和性能优化。
要注意add指令的操作数类型和长度。
在单片机中,数据通常是以二进制格式表示的,所以在进行add操作时需要确保操作数的类型和长度一致,否则可能会导致数据溢出或截断,影响计算结果的准确性。
1.程序状态字PSWMCS-51有一个程序状态字寄存器PSW,用来保存指令执行结果的标志,供程序查讯和判别。
PSW是特殊功能寄存器中的一个,其格式如下:PSW7--既是布尔处理机的累加器C,又是进位标志CY,如果操作结果在最高位有进位输出(加法时)或借位输入(减法时),置位CY,否则清“0”CY。
AC--辅助进位(半进位)标志。
如果操作结果的低4位有进位(加法时)或向高4位借位时(减法),置AC,否则清“0”AC,AC主要用于二-十进制数加法调整。
OV--溢出标志。
如果操作结果有进位进入最高位,但最高位没有产生进位,或者最高位产生进位而低位没有向最高位进位,这时置位溢出标志位,否则OV清“0”。
溢出标志位用于补码运算,当有符号的数运算结果不能用8位二进制数表示时,OV将置位。
P--累加器A的奇偶标志位,如果累加器A的8位的模2和为1(奇),则P=1;否则P=0。
由于P总是表示A的奇偶性,随着A的内容变化的,所以一个值写入PSW的P位的值不变。
RS1、RS0--指示当前使用的工作寄存器区。
F0--用户标志位。
可作为软件标志,它的作用和内部RAM位寻址区的各位相似。
PSW1--保留位,对它的操作无效。
2.加法指令•1、不带进位加法指令工作寄存器、内部RAM单元内容或立即数的8位无符号二进制数和累加器A中数相加,所得和存放于累加器A中,当和的第3、7位有进位时,分别将AC,CY标志位置1;否则为0。
上述指令的执行将影响标志位AC、CY、OV、P。
对于无符号数,进位标志位CY=1,表示溢出;CY=0表示无溢出。
带符号数运算的溢出取决于第6、7位中有一位产生进位,而另一位不产生进位,溢出标志位OV置“1”否则被清“0”。
OV=1表示两个正数相加,和变为负数,或两个负数相加,和变为正数的错误结果。
源操作数有四种寻址方式:寄存器、直接、间接和立即数。
•2、带进位加法指令:这是四条带进位的加法指令。
将累加器A内容加当前CY标志位内容,再加无符号单字节的数,和存于累加器A中。
第4课教学内容:2.4.2数据传送指令及要点分析2.4.3算术运算类指令及要点分析2.4.4逻辑操作与移位指令及要点分析2.4.5控制转移指令及其偏移量的计算2.4.6位操作指令2.4.7对指令的进一步说明教学目标:了解:单片机指令的分类与格式。
掌握:单片机指令的寻址方式,内部数据传送指令特点与应用,算术运算类指令及要点,逻辑操作与移位指令及要点,程序转移指令的相对偏移量计算,位操作指令的特点,PSW标志位的作用。
课时安排:3 课时教学重点:各类指令特点与应用教学提示:一、重点内容与要点分析1.数据传送类指令的共性:1)操作:把源操作数传送到目的操作数,指令执行后,源操作数不改变,目的操作数修改为源操作数。
2)若要求在进行数据传送时,不丢失目的操作数,则可以用交换型的传送指令。
3)数据传送指令不影响标志C、AC和OV,不包括奇偶标志P。
对于P一般不加说明。
POP PSW 或 MOV PSW,#(x)可能使某些标志位发生变化。
助记符有:MOV,MOVX,MOVC,XCH,XCHD,SWAP,POP,PUSH 8种。
源操作数可为:寄存器、寄存器间接、直接、立即、寄存器基址加变址 5种寻址方法;目的操作数可为:寄存器、寄存器间接、直接 3种寻址方法。
例1:设内部RAM的(30H)=40H,(40H)=10H ,(10H)=00H ,端口P1上的内容为11001010B(后缀B表示二进制数),分析下面7条指令分别属于上述16条指令中的哪一条,操作数采用的寻址方法,以及指令执行后各单元及寄存器、端口的内容。
MOV R0,#30H ;属于第8条(寄存器寻址、立即数寻址)(R0)=#30HMOV A,@R0 ;3条(寄存器寻址、寄存器间接寻址)(A)=#40HMOV R1, A ;2条(寄存器寻址、寄存器寻址)(R1)=#40HMOV B, @R1 ;13条(直接寻址、寄存器间接寻址)(B)=#10HMOV @R1, P1 ;14条(寄存器间接寻址,直接寻址)(40H)=#11001010B MOV P2, P1 ;15条(直接寻址、直接寻址)(P2)=#11001010B MOV 10H, #20H ;10条(直接寻址、立即寻址)(10H)=#20H指令执行以后,P1口的内容均为11001010B,其它内容如上。
clp单片机指令
CLP单片机指令是单片机(Microcontroller Unit,MCU)指令集中的一种,用于执行特定的操作和控制单片机的工作流程。
单片机是一种集成电路,通常用于控制各种电子设备和系统。
CLP指令是单片机指令集中的一部分,用于实现各种逻辑和算术运算、数据传输、位操作等功能。
CLP指令通常包括多种类型,如数据传输指令、算术指令、逻辑指令和位操作指令等。
数据传输指令用于将数据从一个寄存器传输到另一个寄存器或内存单元中。
算术指令用于执行加、减、乘、除等算术运算,通常包括加法、减法、乘法、除法等指令。
逻辑指令用于执行与、或、非等逻辑运算,例如与指令(AND)、或指令(OR)和非指令(NOT)等。
位操作指令则用于对二进制位进行操作,例如设置位(SETB)、清除位(CLRB)和取反位(CPL)等。
CLP指令的特点是操作灵活、功能强大、执行速度快。
通过组合不同的指令和操作数,可以实现各种复杂的控制逻辑和数据处理任务。
此外,CLP指令还具有低功耗、高可靠性等优点,适用于各种嵌入式系统和智能设备的控制。
在实际应用中,CLP指令需要根据具体的单片机型号和指令集进行选择和使用。
不同的单片机型号可能具有不同的指令集和指令功能,因此需要根据实际需求进行选择。
同时,在使用CLP指令时,还需要注意指令的语法和操作数的类型,以确保程序的正确性和可靠性。
总之,CLP单片机指令是单片机指令集中的重要组成部分,具有广泛的应用前景和重要的实际应用价值。
通过掌握CLP指令的使用方法和技巧,可以更好地实现单片机控制和数据处理任务,推动嵌入式系统和智能设备的发展。
不带进位位的单片机加法指令
ADD A,#DATA ;例:ADD A,#10H
ADD A,direct ;例:ADD A,10H
ADD A,Rn ;例:ADD A,R7
ADD A,@Ri ;例:ADD A,@R0
用途:将A中的值与其后面的值相加,最终结果否是回到A中。
例:MOV A,#30H
ADD A,#10H
则执行完本条指令后,A中的值为40H。
下面的题目自行练习
MOV 34H,#10H
MOV R0,#13H
MOV A,34H
ADD A,R0
MOV R1,#34H
ADD A,@R1
带进位位的加法指令
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data
用途:将A中的值和其后面的值相加,并且加上进位位C中的值。
说明:由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范
围只有0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位
的数学运算合起来,成为一个16位的运算,这样,能表达的数的范围就能达到
0-65535。如何合并呢?其实很简单,让我们看一个10进制数的例程:
66+78。
这两个数相加,我们根本不在意这的过程,但事实上我们是这样做的:先做6+8
(低位),然后再做6+7,这是高位。做了两次加法,只是我们做的时候并没有刻
意分成两次加法来做罢了,或者说我们并没有意识到我们做了两次加法。之所以
要分成两次来做,是因为这两个数超过了一位数所能表达的范置(0-9)。
在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加
法是将这一点加进去。那么计算机中做16位加法时同样如此,先做低8位的,如
果两数相加产生了进位,也要“点一下”做个标记,这个标记就是进位位C,在PSW
中。在进行高位加法是将这个C加进去。例:1067H+10A0H,先做
67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是7,而1
则到了PSW中的CY位了,换言之,CY就相当于是100H。然后再做
10H+10H+CY,结果是21H,所以最终的结果是2107H。
带借位的单片机减法指令
SUBB A,Rn
SUBB A,direct
SUBB A,@Ri
SUBB A,#data
设(每个H,(R2)=55H,CY=1,执行指令SUBB A,R2之后,A中的值为73H。
说明:没有不带借位的单片机减法指令,如果需要做不带位的减法指令(在做第
一次相减时),只要将CY清零即可。
乘法指令
MUL AB
此单片机指令的功能是将A和B中的两个8位无符号数相乘,两数相乘结果一般
比较大,因此最终结果用1个16位数来表达,其中高8位放在B中,低8位放在A
中。在乘积大于FFFFFH(65535)时,0V置1(溢出),不然OV为0,而CY
总是0。
例:(A)=4EH,(B)=5DH,执行指令
MUL AB后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。
除法指令
DIV AB
此单片机指令的功能是将A中的8位无符号数除了B中的8位无符号数(A/B)。除
法一般会出现小数,但计算机中可没法直接表达小数,它用的是我们小学生还没
接触到小数时用的商和余数的概念,如13/5,其商是2,余数是3。除了以后,商
放在A中,余数放在B中。CY和OV都是0。如果在做除法前B中的值是00H,
也就是除数为0,那么0V=1。
加1指令
INC A
INC Rn
INC direct
INC @Ri
INC DPTR
用途很简单,就是将后面目标中的值加1。例:(A)=12H,(R0)=33H,(21H)
=32H,(34H)=22H,DPTR=1234H。执行下面的指令:
INC A (A)=13H
INC R2 (R0)=34H
INC 21H (21H)=33H
INC @R0 (34H)=23H
INC DPTR ( DPTR)=1235H
后结果如上所示。
说明:从结果上看INC A和ADD A,#1差不多,但INC A是单字节,单周期指
令,而ADD #1则是双字节,双周期指令,而且INC A不会影响PSW位,如(A)
=0FFH,INC A后(A)=00H,而CY依然保持不变。如果是ADD A ,#1,则
(A)=00H,而CY一定是1。因此加1指令并不适合做加法,事实上它主要是用
来做计数、地址增加等用途。另外,加法类指令都是以A为核心的其中
一个数必须放在A中,而运算结果也必须放在A中,而加1类指令的对象则广泛
得多,能是寄存器、内存地址、间址寻址的地址等等。
减1指令
减1指令
DEC A
DEC RN
DEC direct
DEC @Ri
与加1指令类似,就不多说了。
综合练习:
MOV A,#12H
MOV R0,#24H
MOV 21H,#56H
ADD A,#12H
MOV DPTR,#4316H
ADD A,DPH
ADD A,R0
CLR C
SUBB A,DPL
SUBB A,#25H
INC A
SETB C
ADDC A,21H
INC R0
SUBB A,R0
MOV 24H,#16H
CLR C
ADD A,@R0
先写出每步运行结果,然后将以上题目建入,并在软件仿真中运行,观察寄存器
及有关单元的内容的变化,是否与自已的预想结果相同。