当前位置:首页 > 单片机 > 单片机
[导读]   在AT89S51指令系统中,有单字节的加、减、乘、除法指令,算术运算功能比较强。算术运算指令都是针对8位二进制无符号数的,如要进行带符号或多字节二进制数运算,需编写具体的运算程序,通过执行程序

  在AT89S51指令系统中,有单字节的加、减、乘、除法指令,算术运算功能比较强。算术运算指令都是针对8位二进制无符号数的,如要进行带符号或多字节二进制数运算,需编写具体的运算程序,通过执行程序实现。
  
  算术运算的结果将使PSW中的进位(Cy)、辅助进位(Ac)、溢出(OV)3种标志位置1或清0,但是增1和减1指令不影响这些标志。
  
  1.加法指令
  
  共有4条加法运算指令:
  
  这4条8位二进制数加法指令的一个加数总是来自累加器A,而另一个加数可由寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址等不同的寻址方式得到。其相加的结果总是放在累加器A中。
  
  使用加法指令时,要注意累加器A中的运算结果对各个标志位的影响:
  
  (1)如果位7有进位,则进位标志Cy置l,否则Cy清0。
  
  (2)如果位3有进位,辅助进位标志Ac置1,否则Ac(Ac为PSW寄存器中的一位)清O。
  
  (3)如果位6有进位而位7没有进位,或者位7有进位而位6没有进位,则溢出标志位OV置l,否则OV清0。
  
  溢出标志位OV的状态,只有进行带符号数加法运算时才有意义。当两个带符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围(-128~+127),即产生了溢出,表示运算结果是错误的,否则运算是正确的,即无溢出产生。
  
  【例3-1】 (A)=53H,(RO)=FCH,执行指令
  
  运算式为
  
  结果为(A)=4FH,Cy=l,Ac=0,OV=O,P=1(A中l的位数为奇数)。
  
  注意:在上面的运算中,由于位6和位7同时有进位,所以标志位OV=O。
  
  【例3-2】 (A)=85H,(RO)=20H,(20H)=AFH,执行指令

运算式为

结果为(A)=34H,Cy=l,Ac=l,OV=1,P=1。
  
  注意:由于位7有进位,而位6无进位,所以标志位OV=1。
  
  2.带进位加法指令
  
  带进位加法运算的特点是进位标志位Cy参加运算,因此带进位的加法运算是三个数相加。带进位的加法指令共4条:
  
  这组带进位加法指令的功能是,指令中不同寻址方式所指定的加数、进位标志与累加器A内容相加,结果存在累加器A中。
  
  如果位7有进位,则进位标志Cy置1,否则Cy清0;如果位3有进位输出,则辅助进位标志Ac置l,否则Ac清0;如果位6有进位而位7没有进位,或者位7有进位而位6没有进位,则溢出标志OV置1,否则标志OV清O。
  
  【例3-3】 (A)=85H,(20H)=FFH,Cy=l,执行指令
  
  运算式为
  
  结果为(A)=85H,Cy=l,Ac=l,OV=0,P=l(A中1的位数为奇数)。
  
  3.增1指令
  
  共有5条增1指令:
  
  这组增1指令的功能是把指令中所指出的变量增1,且不影响程序状态字PSW中的任何标志。若变量原来为FFH,加1后将溢出为OOH(仅指前4条指令),标志也不会受到影响。第5条指令“INC DPTR”,是16位数增1指令。指令首先对低8位指针DPL的内容执行加1操j作,当产生溢出时,就对DPH的内容进行加1操作,并不影响标志Cy的状态。
  
  4.十进制调整指令
  
  十进制调整指令用于对BCD码十进制数加法运算结果的内容进行修正,指令格式为:
  
  这条指令的功能是对压缩的BCD码(一个字节存放2位BCD码)的加法结果进行十进制调整。两个BCD码按二进制相加之后,必须经本指令的调整才能得到正确的压缩BCD码的和数。
  
  (1)十进制调整问题
  
  对于十进制数(BCD码)的加法运算,只能借助于二进制加法指令。然而,二进制数的加法运算原则上并不能适用于十进制数的加法运算,有时会产生错误结果。
  
  例如:
  
  上述的BCD码运算中:
  
  (a)运算结果正确。
  
  (b)运算结果不正确,因为十进制数的BCD码中没有1111这个编码。
  
  (c)运算结果也不正确,正确结果应为17,而运算结果却是11。
  
  这种情况表明,二进制数加法指令不能完全适用于BCD码十进制数的加法运算,因此要对结果进行有条件的修正,这就是所谓的十进制调整问题。
  
  (2)出错原因和调整方法
  
  出错的原因在于BCD码是4位二进制编码,共有16个编码,但BCD码只用了其中的10个,剩下6个没用到。这6个没用到的编码(1010,1011,1100,1101,1110,1111)为无效编码。
  
  在BCD码的加法运算中,凡结果进入或者跳过无效编码区时,其结果就是错误的。因此1泣BCD码加法运算出错的情况有以下两种:
  
  ①相加结果大于9,说明已经进入无效编码区。
  
  ②相加结果有进位,说明已经跳过无效编码区。
  
  无论哪一种出错情况,都是因为6个无效编码造成的。因此,只要出现上述两种情况之一,就必须进行调整。调整的方法是把运算结果加6调整,即所谓的十进制调整修正。
  
  十进制调整的修正方法如下:
  
  ①累加器低4位大于9或辅助进位位Ac=l,则进行低4位加6修正。
  
  ②累加器高4位大于9或进位位Cy=l,则进行高4位加6修正。
  
  ③累加器高4位为9,低4位大于9,则高4位和低4位分别加6修正。
  
  上述十进制调整修正,是通过执行指令“DA A”自动实现的。
  
  【例3-4】 (A)=56H,(R5)=67H,把它们看作两个压缩的BCD数,进行BCD数加法。
  
  执行指令:
  
  由于高4位和低4位分别大于9,所以“DA A”指令要分别加6,来对结果进行修正。
  
  结果为(A)=23H,Cy=l。
  
  由上可见,56+67=123,结果是正确的。
  
  5.带借位的减法指令
  
  共有4条指令:
  
  这组带借位减法指令是从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存放在累加器A中。
  
  如果位7需借位则Cy置l,否则Cy清0;如果位3需借位则Ac置1,否则Ac清0;如果位6需借位而位7不需要借位,或者位7需借位而位6不需借位,则溢出标志位OV置1,否则OV清0。
  
  源操作数允许有寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址方式。
  
  【例3-5】 (A)=C9H,(R2)=54H,Cy=l,执行指令
  
  运算式为
  
  结果为(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位)。
  
  6.减1指令
  
  共有4条指令:
  
  这组指令的功能是指定的变量减1。若原来为OOH,减1后下溢为FFH,不影响标志位(P标志除外)。
  
  【例3-6】 (A)=OFH,(R7)=19H,(30H)=OOH,(Rl)=40H,(40H)=OFFH,执行指令
  
  结果为(A)=OEH,(R7)=18H,(30H)=OFFH,(40H)=OFEH,P=l,不影响其他标志。
  
  7.乘法指令
  
  这条指令的功能是把累加器A和寄存器B中的无符号8位整数相乘,其16位积的低位字节在累加器A中,高位字节在B中。如果积大于255,则溢出标志位OV置1,否则OV清0。进位标志位Cy总是清0。
  
  8.除法指令
  
  该指令的功能是用累加器A中8位无符号整数(被除数)除以B中8位无符号整数(除数),所得的商(为整数)存放在累加器A中,余数存放在寄存器B中,且Cy和溢出标志位OV清0。如果B的内容为0(即除数为0),则存放结果的A、B中的内容不定,并溢出标志位OV置l。
  
  【例3-7】 (A)=FBH,(B)=12H,执行指令
  
  结果为(A)=ODH,(B)=11H,Cy=0,OV=O。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

广州2023年9月22日 /美通社/ -- 日前,国际独立第三方检测、检验和认证机构德国莱茵TÜV大中华区(以下简称"TÜV莱茵")顺...

关键字: 研讨会 中国汽车 汽车产业 指令

深圳2023年8月10日 /美通社/ -- 近日,源自德国的第三方检测认证机构TÜV南德意志集团 (NB 0123) (以下简称"TÜ...

关键字: 网络安全 指令 BSP ST

(全球TMT2023年7月20日讯)7月19日,第二十届中国制造业数字化转型高峰论坛在西安举行。中之杰智能与现场嘉宾共同分享企业转型方法,探索数智化最佳实践,为制造业高质量发展集势聚能。中之杰智能打造了颠覆性创新产品...

关键字: 建模 双模 中国制造业 指令

单片机的功能是由指令系统体现的。所以,寻址方式和指令系统是衡量微型机的重要指标。

关键字: 单片机 指令 寻址方式

单片机将中央处理器(CPU)、存储和输入输出集成在一个芯片上。可以说,单片机就是微机,只是它的功能和我们平时用的电脑不一样,不是我们用的。像电脑一样强大。计算机可以一个一个地运行应用程序,单片机可以根据工程师的指令编写可...

关键字: 单片机 寄存器 指令

对新手PLC编程入门,或刚毕业的大学生,或多或少对PLC编程有所了解。学习PLC编程常见的方法就是通过相关的辅导书籍来学习,当然,随着PLC培训班的兴起,去PLC编程培训学校学习也是一种很好的学习方法。

关键字: plc 算术运算 指令

ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。ARM微处理器的指令集可以分为跳转指令、数据处理指令、程序...

关键字: ARM 处理器 指令

在指令“MOV A,#12H”中,立即数#12H是源操作数,紧随操作码74H之后存放在ROM中。该指令执行时,单片机先从ROM中读取操作码74H,对操作码74H解码后,确定要进行的操作是将一个8位立即数送入累加器A,接下...

关键字: 单片机 指令 寻址方式

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在...

关键字: 汇编语言 指令 单片机

北京2023年1月3日 /美通社/ -- 近日,由中国消费品质量安全促进会(简称“中消会”)和亚马逊共同举办的2022年出口消费品安全合规年度总结大会,暨跨境电商质量安全治理专业委员会筹备启动大会在线上圆满举行。会议回顾...

关键字: 亚马逊 SAFETY 中国制造 指令
关闭
关闭