第3章mcs-51的指令系统内容摘要:

DPTR作为基址寄存器, A的内容作为无符号数和 DPTR的内容相加得到一个 16位的地址,把由该地址指出的程序存储器单元的内容送到累加器 A. 例如 (DPTR)=8100H (A)=40H 执行指令 MOVC A,@A+DPTR 本指令的执行结果只和指针 DPTR及累加器 A的内容有关 , 与该指令存放的地址及常数表格存放的地址无关 , 因此表格的大小和位置可以在 64K程序存储器中任意安排 , 一个表格可以为各个程序块公用。 两条指令是在 MOV的后面加 C, “ C”是 CODE的第一个字母,即代码的意思。 9. 字节交换指令 XCH A,Rn XCH A,direct XCH A,@Ri 例如: (A)=80H, (R7)=08H, (40H)=F0H (R0)=30H, (30H)=OFH 执行下列指令: XCH A,R7。 (A)与 (R7)互换 XCH A,40H。 (A)与 (40H)互换 XCH A,@R0。 (A)与 ((R0))互换 结果: (A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H 10. 半字节交换指令 XCHD A,@Ri 累加器的低 4位与内部 RAM低 4位交换。 例如: (R0)=60H,(60H)=3EH,(A)=59H 执行完 XCHD A,@RO 指令 ,则 (A)=5EH,(60H)=39H。 算术操作类指令 单字节的加、减、乘、除法指令,都是针对 8位二进制无符号数。 执行的结果对 Cy、 Ac、 OV 三种标志位有影响。 但增 1和减 1指令不影响上述标志。 1. 加法指令 共有 4条加法运算指令: ADD A,Rn。 (A)+(Rn)→A , n=0~ 7 ADD A,direct。 (A)+(direct)→A ADD A,@Ri。 (A)+((Ri))→A,i= 0,1 ADD A,data。 (A)+data→A 一个加数总是来自累加器 A, 而另一个加数可由不同的寻址方式得到。 结果总是放在 A中。 使用加法指令时 , 要注意累加器 A中的运算结果对各个标志位的影响: ( 1) 如果 位 7有进位 , 则置 “ 1”进位标志 Cy, 否则清“ 0”Cy ( 2) 如果 位 3有进位 , 置 “ 1”辅助进位标志 Ac, 否则清 “ 0”Ac( Ac为 PSW寄存器中的一位 ) ( 3) 如果位 6有进位 , 而位 7没有进位 , 或者位7有进位 , 而位 6没有 , 则溢出标志位 OV置“ 1”, 否则清 “ 0”OV。 溢出标志位 OV的状态 , 只有在带符号数加法运算时才有意义。 当两个带符号数相加时 ,OV=1, 表示加法运算超出了累加器 A所能表示的带符号数的有效范围 例 (A)=53H, (R0)=FCH, 执行指令 ADD A,R0 结果 : (A)=4FH, Cy=1, Ac=0, OV=0, P=1 注意: 上面的运算中 , 由于位 6和位 7同时有进位 , 所以标志位 OV=0。 例 (A)= 85H,(R0)=20H,( 20H) =AFH, 执行指令: ADD A,@R0 结果 :( A) =34H, Cy=1, Ac=1, OV=1, P=1 注意: 由于位 7有进位 , 而位 6无进位 , 所以标志位 OV=1 2.带进位加法指令 标志位 Cy参加运算,因此是三个数相加。 共 4条: ADDC A,Rn。 (A)+(Rn)+C→A , n=0 ~ 7 ADDC A,direct。 (A)+(direct)+C→A ADDC A,@Ri。 (A)+(Ri)+C→A , i=0,1 ADDC A,data。 (A)+data+C→A 例: ( A) =85H,( 20H) =FFH,Cy=1, 执行指令: ADDC A,20H 结果为 :( A) =85H, Cy=1, Ac=1, OV=0, P=1 ( A中 1 的位数为奇数 ) 3. 增 1指令 5条增 1指令: INC A INC Rn。 n=0~ 7 INC direct INC @Ri。 i=0,1 INC DPTR 不影响 PSW中的任何标志。 第 5条指令 INC DPTR, 是 16位数增 1指令。 指令首先对低 8位指针 DPL的内容执行加 1的操作 , 当产生溢出时 ,就对 DPH的内容进行加 1操作 , 并不影响标志 Cy的状态。 4.十进制调整指令 用于对 BCD码十进制数加法运算结果的内容修正。 指令格式: DA A 两个 BCD码按二进制相加之后 , 必须经本指令的调整 才能得到正确的压缩 BCD码的和数。 二进制数的加法运算原则并不能适用于十进制数的加法运算 , 有时会产生错误结果。 例如: ( a) 3+6=9 0011+0101=1001 运算结果正确 ( b) 7+8=15 0111+1000=1111 运算结果不正确 ( c) 9+8=17 1001+1000=00001 C=1 结果不正确 二进制数加法指令不能完全适用于 BCD码十进制数的加法运算 , 对结果作有条件的修正 ——十进制调整 • 出错原因和调整方法: BCD码只用了了其中的 10个 , 6个没用到的编码。 ( 1010, 1011, 1100, 1101, 1110, 1111)为 无效码 凡结果进入或者跳过无效码编码区时,其结果就是错误的。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。