tceic.com
学霸学习网 这下你爽了
赞助商链接
当前位置:首页 >> 信息与通信 >>

单片机 算术运算类 指令


第六课
复习 3.4 MCS-51指令系统的分类介绍
3.4.2 算术运算类指令

3.4.3 逻辑运算类指令

3.4

MCS-51指令系统分类介绍

3.4.2 算术运算类指令(24条)
算术运算指令可以完成加、减、乘、除及加加1和减1等 运算。这类指令多数以A为源操作数之一,同时又使A为目 的操作数。 1 .不带进位加法指令(4条) 2 .带进位加法指令(4条) 3 .带借位减法指令(4条) 4 . 乘法指令(1条) 5. 除法指令(1条) 6. 加1指令(5条) 7. 减1指令(4条) 8. 十进制调整指令(1条)

3.4.2

算术运算类指令(24条)

?

标志位的作 用

进位(借位)标志CY为无符号整数的多字节加法、 减法、移位等操作提供了方便; 溢出标志OV可方便的控制补码运算; 辅助进位标志AC用于BCD码运算。 算术运算操作将影响PSW中的OV、CY、AC和P等。

3.4.2
? ? ? ADD A,? ? ? ? Rn

算术运算类指令(24条)
;A ? A) Rn) ( ? ( ;A ? A) direct) ( ? ( ;A ? A) ( ? Ri)) (( ;A ? A) data ( ?

1. 加法指令(不带进位加)
direct @Ri #data

CY:和的D7位有进位时,(CY)=1;否则,(CY)=0。 AC:和的D3位有进位时,(AC)=1;否则,(AC)=0。 OV:和的D7、D6位只有一个有进位时,(OV)=1;溢出表 示运算的结果超出了数值所允许的范围。如:两个正数相加 结果为负数或两个负数相加结果为正数时属于错误结果,此 时(OV)=1。 P:累加器ACC中“1”的个数为奇数时,(P)=1;为偶数时, (P)=0。

3.4.2

算术运算类指令(24条)

例如:

若: (A)=78H , (R0)=64H 执行 ADD A,R0 后,结果及 PSW=? (A) :78H= 01111000 B + (R0) :64H= 01100100 B (A) :DCH= 11011100 B 标志位: CY=0, AC=0, OV=1, 即 PSW=05H 结果: (A)=DCH (R0)=64H

P=1,

3.4.2

算术运算类指令(24条)
;A? A) Rn) CY) ( ? ( ? ( ;A? A) direct) CY) ( ? ( ? ( ;A? A) ( ? Ri)) CY) (( ? ( ;A? A) data ? CY) ( ? (

2.带进位加法指令
? ? ? ADDC A,? ? ? ? Rn direct @Ri #data

指令的功能是把源操作数与累加器A的内容相加再与进 位标志CY的值相加,结果送入目的操作数A中。 加的进位标志CY的值是在该指令执行之前已经存在的进 位标志的值,而不是执行该指令过程中产生的进位 。

3.4.2

算术运算类指令(24条)

例1:设(A)=0C3H,(R0)=0AAH, (CY)=1。 执行指令“ADDC A,R0”后的结果及标志位如何?

解: (A) C3H=1100 0011 : + (CY) : 1=0000 0001 1100 0100 + (R0) AAH=1010 1010 : (A) 6EH=0110 1110 : 标志位:CY=1,OV=1,AC=0, 结果: (A)=6EH, (R0)=0AAH。

3.4.2

算术运算类指令(24条)

例2:编程,将(30H),(31H)单元中的数与(40H)、 (41H) 单元中的数相加,结果存于(30H),(31H)单元中。

解:MOV ADD MOV MOV ADDC MOV

A, 30H A, 40H 30H, A A, 31H A, 41H 31H, A

(31H)(30H) +(41H)(40H)
?

(31H)(30H)

3.4.2

算术运算类指令(24条)

例3:写指令,完成RAM中(30H)、(31H)、(32H) 连加,结果送33H?

用ADD还是用ADDC ?
ABC: MOV ADD ADD MOV RET A, A, A, 33H, 30H 31H 32H A

当几十个数连加时,怎么办?

3.4.2 3.增1指令
? ? ? ? ? ? ? ? ? A Rn direct @ Ri DP TR

算术运算类指令(24条)

;A ? A) 1 ( ? ;Rn ? Rn) 1 ( ? ;direct ? direct ? 1 ( ) ;(Ri) ((Ri)) 1 ? ? ;DP TR ? DP TR) 1 ( ?

INC

指令的功能是把源操作数的内容加 1 ,结果再送回原 单元。这些指令仅 INC A 影响P标志。其余指令都不影响 标志位的状态。

3.4.2

算术运算类指令(24条)

该组指令的操作不影响 PSW。若原单元内容 为 FFH,加 1 后溢出为 00H,也不影响 PSW 标志。

例:比较指令“INC A”和“ADD A,#01H” 的结果。 解: “INC A”指令只将 A 的内容加 1,标志 位没有变化。而“ADD A,#01H”指令不仅 将 A 的内容加 1,还影响标志位变化。

3.4.2

算术运算类指令(24条)

4.十进制调整指令
DA A 指令的功能是对累加器A中刚进行的两个BCD码的加法的 结果进行十进制调整。 两个压缩的BCD码按二进制相加后,必须经过调整方能 得到正确的压缩BCD码的和。
A中一加数 另一加数 要求:BCD码

ADD或ADDC DA A

A中结果一定是BCD 码,实现了十进制 的加法

3.4.2

算术运算类指令(24条)

调整完成的途径是:
(1)当累加器A中的低4位数出现了非BCD码(1010~1111) 或低4位产生进位(AC=1),则应在低4位加6调整,以产 生低4位正确的BCD结果。

(2)当累加器A中的高4位数出现了非BCD码(1010~1111) 或高4位产生进位(CY=1),则应在高4位加6调整,以产生 高4位正确的BCD结果。 十进制调整指令执行后,PSW中的CY表示结果的百位值。

3.4.2

算术运算类指令(24条)

例 若(A)=0101 0110B,表示的BCD码为,(R2) =0110 0111B,表示的BCD码为,(CY)=0。执行以下 指令: ADD A,R2 DA A 由于(A)=0010 0011B,即,且(CY)=1,即

结果为BCD数123。 应该注意,DA指令不能对减法进行十进制调整。

3.4.2

算术运算类指令(24条)

5.带借位减法指令
? ? ? SUBB A,? ? ? ? Rn direct @Ri #data ;A ? A) Rn) CY) ( ? ( ? ( ;A ? A) direct) CY) ( ? ( ? ( ;A ? A) ( ? Ri)) CY) (( ? ( ;A ? A) data ? CY) ( ? (

这组指令的功能是从累加器A中减去源操作数所指出的 CY:差的位7需借位时,(CY)=1;否则,(CY)=0。 数及进位位CY的值,差保留在累加器A中。 AC:差的位3需借位时,(AC)=1;否则,(AC)=0。 由于89C51指令系统中没有不带借位的减法指令,如需 OV:若位6有借位而位7无借位或位7有借位而位6无借位 要的话,可以在“SUBB”指令前用“CLR C”指令将Cy清0, 时,(OV)=1。 这一点必须注意。 如要用此组指令完成不带借位减法,只需先清CY为 0。

3.4.2

算术运算类指令(24条)

例 若(A)=C9H,(R2)=54H,(CY)=1,执行指令 SUBB A,R2 之后,由于:

即:(A)=74H,(CY)=0,(AC)=1, (OV)=1(位6有借位,位7无借位),(P)=0。

3.4.2

算术运算类指令(24条)

6.减1指令
? ? ? ? ? ? ? A Rn direct @Ri ;A ? A) 1 ( ? ;Rn ? Rn ) 1 ( ? ;direct ? direct) 1 ( ? ;( Ri ) (( Ri )) 1 ? ?
1 ,结果再送回

DEC

?这组指令的功能是把操作数的内容减

原单元。 ?这组指令仅 DEC A 影响P标志。其余指令都不影响标 志位的状态。 ?与INC比较,少了一种寻址方式。

3.4.2

算术运算类指令(24条)

关于PSW的自动置位,关于CY、OV的解读:
?

1. 数电中的加法器:





进位

? ? ? ?

2. OV的自动置位 OV=C6⊕C7 当同号相加时,若结果异号,则溢出。报OV=1 当异号相减时,减数与差同号,则溢出。报OV=1

?

当进行无符号运算时,CY有意义。 当进行有符号运算时,OV有意义。 CPU的运算器并不区分是有、无符号运算,它进行 的是补码运算,由编程者自己解读。
有符号数 ALU OV?

有符号数

无符号数
ALU

无符号数
CY?

有符号数 无符号数
CY=0
CY=1 OV=0 OV=1

√ ? √ ×

3.4.2 7.乘法指令 MUL AB

算术运算类指令(24条)

;累加器A与B寄存器相乘

该指令的功能是将累加器A与寄存器B中的无符号8位 二进制数相乘 ,乘积的低8位留在累加器A中,高8位存放 在寄存器B中。 ? 当乘积大于FFH时,溢出标志位(OV)=1。而标志CY总 是被清0。
例 若(A)=50H,(B)=A0H, 执行指令 MUL AB ;(A)=00H,(B)=32H, (OV)=1, (CY)=0。

3.4.2

算术运算类指令(24条)

8.除法指令
DIV AB ;累加器A除以寄存器B

该指令的功能是将累加器A中的无符号8位二进制数除 以寄存器B中的无符号8位二进制数 ,商的整数部分存放在 累加器A中,余数部分存放在寄存器B中。 ? 当除数为0时,则结果的A和B的内容不定,且溢出标志 位(OV)=1。而标志CY总是被清0。

例 若(A)=FBH(251),(B)=12H(18),
执行指令 DIV AB ; (OV)=0,(CY)=0。 (A)=0DH,(B)=11H,

3.4.3 逻辑运算类指令(25条) 3.4.3 逻辑运算类指令(25条)
1.逻辑运算:与、或、异或(18条)

2.累加器清0和取反(2条)
3.累加器循环移位 (5条) 逻辑运算指令可以完成与、或、异或、清0和取反操作, 当以累加器A为目的操作数时,对P标志有影响; 循环指令是对累加器A的循环移位操作,包括左、右方 向以及带与不带进位位等移位方式,移位操作时,带进位的 循环移位对CY和P标志有影响; 累加器清0操作对P标志有影响。

3.4.3 逻辑运算类指令(25条)

3.4.3 逻辑运算类指令(25条)

3.4.3 逻辑运算类指令(25条)
1.逻辑运算:与、或、异或
? A ANL direct , ? ? # data
? ? ? ANL A , ? ? ? ? Rn direct @Ri # data

;direct? direct ? A) ( )( ;direct? direct ? data ( )
;A ? A)(Rn ) ( ? ;A ? A)(direct) ( ? ;A ? A)(( Ri )) ( ? ;A ? A) data ( ?

前2条指令的功能是把源操作数与直接地址指示的 单元内容相与,结果送入直接地址指示的单元。 后4条指令的功能是把源操作数与累加器A的内容相 与,结果送入累加器A中。 例 若(A)=C3H,(R0)=AAH,执行指令 ANL A, R0 之后,(A)=82H。

3.4.3 逻辑运算类指令(25条)
1.逻辑运算:与、或、异或
? A ORL direct , ? ? # data
? ? ? A , ? ? ? ? Rn direct @Ri # data

;direct? direct ? A) ( )( ;direct? direct ? data ( )
;A ? A)(Rn ) ( ? ;A ? A)(direct) ( ? ;A ? A)(( Ri )) ( ? ;A ? A) data ( ?

ORL

前2条指令的功能是把源操作数与直接地址指示的单元 内容相或,结果送入直接地址指示的单元。 后4条指令的功能是把源操作数与累加器A的内容相或, 结果送入累加器A中。
例 若(A)=C3H,(R0)=55H,执行指令ORL A, R0 之后,(A)=D7H。

3.4.3 逻辑运算类指令(25条)
1.逻辑运算:与、或、异或
? A XRL direct , ? ? # data
? ? ? A , ? ? ? ? Rn direct @Ri # data

;direct? direct ? A) ( )( ;direct? direct ? data ( )
;A ? A)(Rn ) ( ? ;A ? A)(direct) ( ? ;A ? A)(( Ri )) ( ? ;A ? A) data ( ?

XRL

前2条指令的功能是把源操作数与直接地址指示的单元内 容异或,结果送入直接地址指示的单元。 后4条指令的功能是把源操作数与累加器A的内容异或,结 果送入累加器A中。 例 若(A)=C3H,(R0)=AAH,执行指令 XRL A, R0 之后,(A)=69H。

3.4.3 逻辑运算类指令(25条)
2.累加器清0和取反

CLR ? ? CPL ?

A

;A ← 0 ;A ← A

这两条指令的功能分别是把累加器A的内容清 0 和取反, 结果仍在A中。数据也只有在A中时,才能进行字节操作的清 零和取反。 例 若(A)=A5H, 执行指令 CLR A 之后,(A)=00H 执行指令 CPL A 之后,(A)=5AH 但: 若 (30H)=A5H, 执行指令 CLR 30H 之后,(30H)≠00H 执行指令 CPL 30H 之后,(30H)≠5AH

3.4.3 逻辑运算类指令(25条)
3.累加器循环移位
? RRC ? ? ? RL ? RLC ? ? RR
SFR

A

所有的移位都是循环 移位。有八位的移位, 也有九位的移位。唯 一的操作数是A.

SFR

SFR

SFR

PSW CY A A7 A0

PSW CY A7 A0 A

PSW CY A A7 A0

PSW CY A7 A0 A

RR A

RRC A

RL A

RLC A

3.4.3 逻辑运算类指令(25条)
SWAP A SWAP指令的功能是累加器 的高低4位互换。 若(A)=30H,执行指令SWAP A后,(A)=03H。

有时“累加器A内容乘2”的任务可以利用指令RLC A方便地完成。 例:若(A)= 06H = 00000110B=06H, (CY)=0。 执行指令RLC A后,(A)= 00001100B = 0CH ,(CY)=0 。 结果为:0CH=2×06H

3.4.3 逻辑运算类指令(25条)

练习: 用移位和加法指令实现R0的内容乘以10,并 把结果送R0。(数据较小,结果仍为一个字节)
ABC: MOV RL MOV RL RL ADD MOV RET A, R0 A B, A A A A, B R0, A

2010-03-25 作业
?

P36 12、16



推荐相关:

单片机重点复习题

答: 80C51 单片机指令系统操作码助记符 单片机课后习题 按功能可分为五大类。 (1)数据传送类指令(7 种助记符) (2)算术运算类指令(8 种助记符) (3)逻辑...


单片机C语言编程常用的运算符介绍

单片机C语言编程常用的运算符介绍 - 单片机 C 语言编程常用的运算符介绍 在单片机 C 语言编程中,通常用到 30 个运算符,如表 1 ,其中算术运算符 13 个, 关系...


单片机 数传指令和算数运算指令 软件实验

单片机 数传指令和算数运算指令 软件实验_计算机软件及应用_IT/计算机_专业资料...单片机 算术运算类 指令 35页 2下载券 单片机 逻辑运算及位操... 42页 1下载...


微机原理与接口技术软件实验34——51单片机算术运算、...

微机原理与接口技术软件实验34——51单片机算术运算、比较和查表_信息与通信_...设计型实验内容 ① 分别用近程查表指令和远程查表指令,查找 R3 内容的平方值...


基于FPGA的MCS-51单片机的逻辑运算模块设计本科毕业设...

基于FPGA 的 MCS-51 单片机算术运算模块设计 摘要 MCS-51 是 Intel 公司...其指令系统有各种控制功能用指令,很容易构成各种规模的应用系统,易扩展,可 以很...


基于FPGA的MCS-51单片机的逻辑运算模块设计本科毕业设计

基于FPGA 的 MCS-51 单片机算术运算模块设计 基于 FPGA 的 MCS-51 单片机的...其指令系统有各种控制功能用指令,很容易构成各种规模的应用系统,易扩展,可 以很...


单片机原理与应用第四章作业答案

单片机原理与应用第四章作业答案_信息与通信_工程科技_专业资料。4-9 试计算片内RAM区40H~47H单元中8个数据的平均值,结果存放在4Ah中 ;说明: 先对8个数求和...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com