350 likes | 475 Views
第六课. 复习. 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 条).
E N D
第六课 复习 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条)
标志位的置位方式 标志位的作用 进位(借位)标志CY为无符号整数的多字节加法、减法、移位等操作提供了方便; 溢出标志OV可方便的控制补码运算; 辅助进位标志AC用于BCD码运算。 算术运算操作将影响PSW中的OV、CY、AC和P等。
3.4.2 算术运算类指令(24条) 1. 加法指令(不带进位加) 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条) 2.带进位加法指令 指令的功能是把源操作数与累加器A的内容相加再与进位标志CY的值相加,结果送入目的操作数A中。 加的进位标志CY的值是在该指令执行之前已经存在的进位标志的值,而不是执行该指令过程中产生的进位 。
例1:设(A)=0C3H,(R0)=0AAH, (CY)=1。执行指令“ADDC A,R0”后的结果及标志位如何? 3.4.2 算术运算类指令(24条)
(31H)(30H) +(41H)(40H) (31H)(30H) 3.4.2 算术运算类指令(24条) 例2:编程,将(30H),(31H)单元中的数与(40H)、 (41H)单元中的数相加,结果存于(30H),(31H)单元中。
例3:写指令,完成RAM中(30H)、(31H)、(32H)连加,结果送33H?例3:写指令,完成RAM中(30H)、(31H)、(32H)连加,结果送33H? 3.4.2 算术运算类指令(24条) 用ADD还是用ADDC ? ABC: MOV A, 30H ADD A, 31H ADD A, 32H MOV 33H, A RET 当几十个数连加时,怎么办?
3.4.2 算术运算类指令(24条) 3.增1指令 指令的功能是把源操作数的内容加 1 ,结果再送回原单元。这些指令仅 INC A 影响P标志。其余指令都不影响标志位的状态。
3.4.2 算术运算类指令(24条) ADD或ADDC DA A A中一加数 A中结果一定是BCD码,实现了十进制的加法 另一加数 要求:BCD码 4.十进制调整指令 DA A 指令的功能是对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。 两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的压缩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.带借位减法指令 这组指令的功能是从累加器A中减去源操作数所指出的数及进位位CY的值,差保留在累加器A中。 由于89C51指令系统中没有不带借位的减法指令,如需要的话,可以在“SUBB”指令前用“CLR C”指令将Cy清0,这一点必须注意。 CY:差的位7需借位时,(CY)=1;否则,(CY)=0。 AC:差的位3需借位时,(AC)=1;否则,(AC)=0。 OV:若位6有借位而位7无借位或位7有借位而位6无借位时,(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指令 • 这组指令的功能是把操作数的内容减 1 ,结果再送回原单元。 • 这组指令仅 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 有符号数 有符号数 ALU CY? OV?
3.4.2 算术运算类指令(24条) 7.乘法指令 MUL AB;累加器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 ; (A)=0DH,(B)=11H, (OV)=0,(CY)=0。
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条) 1.逻辑运算:与、或、异或 前2条指令的功能是把源操作数与直接地址指示的单元内容相与,结果送入直接地址指示的单元。 后4条指令的功能是把源操作数与累加器A的内容相与,结果送入累加器A中。 例 若(A)=C3H,(R0)=AAH,执行指令 ANL A,R0 之后,(A)=82H。
3.4.3 逻辑运算类指令(25条) 1.逻辑运算:与、或、异或 前2条指令的功能是把源操作数与直接地址指示的单元内容相或,结果送入直接地址指示的单元。 后4条指令的功能是把源操作数与累加器A的内容相或,结果送入累加器A中。 例 若(A)=C3H,(R0)=55H,执行指令ORL A,R0 之后,(A)=D7H。
3.4.3 逻辑运算类指令(25条) 1.逻辑运算:与、或、异或 前2条指令的功能是把源操作数与直接地址指示的单元内容异或,结果送入直接地址指示的单元。 后4条指令的功能是把源操作数与累加器A的内容异或,结果送入累加器A中。 例 若(A)=C3H,(R0)=AAH,执行指令 XRL A,R0 之后,(A)=69H。
3.4.3 逻辑运算类指令(25条) 2.累加器清0和取反 ;A ← 0 ;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.累加器循环移位 所有的移位都是循环移位。有八位的移位,也有九位的移位。唯一的操作数是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 A, R0 RL A MOV B, A RL A RL A ADD A, B MOV R0, A RET
2010-03-25 作业 • P36 12、16