单片机的带借位减法

单片机的带借位减法,第1张

单片机中用到带借位的减法是为了进行多字节的减法运算,在进行高位字节运算时,要同时减去低位字节的借位,以得到正确的结果。
如果cy=1,SUBB
#09H,#05H
结果是03H
不是很正确噢
首先你的指令是非法指令,计算机、单片机中的立即数是不能做目的 *** 作数的,目的 *** 作数是要保存结果的,而立即数是不能保存结果的。
要想完成你的运算想法,应该写成如下形式:
MOV
A,#9
SETB
C
SUBB
A,#5
即执行后:
(A)-5-cy=9-5-1=3
结果为03H是正确的。
在进行最低字节的减法运算时,即刚开始做减法,还没有产生借位,应在运算前使cy=0

CLR
C
MOV
A,#DATA1
SUBB
A,#DATA2
执行时,
(A)-DATA2-cy=DATA1-DATA2-0
呵呵
满意
就选满意回答

    9: void delay_50us(uint t) //50us延迟函数 
    10: { 
    11:           uchar j; 
    12:           for(;t>0;t--) 
    13:           for(j=19;j>0;j--); 
    14: }
C:0x0D45    D3       SETB     C ;1
C:0x0D46    EF       MOV      A,R7 ;1
C:0x0D47    9400     SUBB     A,#0x00 ;2
C:0x0D49    EE       MOV      A,R6 ;1
C:0x0D4A    9400     SUBB     A,#0x00 ;2
C:0x0D4C    400B     JC       C:0D59 ;1
C:0x0D4E    7D13     MOV      R5,#0x13 ;1
C:0x0D50    DDFE     DJNZ     R5,C:0D50 ;192=38
C:0x0D52    EF       MOV      A,R7 ;1
C:0x0D53    1F       DEC      R7 ;1
C:0x0D54    70EF     JNZ      delay_50us(C:0D45) ;2
C:0x0D56    1E       DEC      R6 ;1
C:0x0D57    80EC     SJMP     delay_50us(C:0D45) ;2
C:0x0D59    22       RET      ;2
这是KEIL反汇编出来的结果,可见总的机器周期=56
当晶振为110592M时,t=1,那么实际延时时间=61us

1、由于是用0ABH-0C3H=0E8H(也就是十进制的-24,补码表示),因此ACC=0E8H;
2、由于AB比C3小,因此运算时必然借位,因此CY=1;
3、由于AB=10101011,C3=11000011,因此减法时D3位没有向D4位借位,因此AC=0;
4、运算过程中小数减大数,有溢出,因此OV=1;
5、由于运算结果存在ACC中为E8=11101000有偶数个“1”,因此P=0

符号数,在计算机中,以补码表示。
其外形,也是二进制数字,和无符号数,并无差别。
151汇编语言add、addc、subb三个指令使用的是有符号数还是无符号数?
--都可以。
--参加运算的,就是普通的二进制数。
--既可以是补码,也可以是无符号数。
251单片机中什么时候会涉及到有符号数计算?
--由你编程决定。
3有符号数可以用#data输入吗?
--可以。
--如:MOV A, #-100
4有符号数减法溢出,在psw中怎么显示。。。
--如发生溢出,PSW 中,OV = 1。
5有符号数可以与无符号数相互运算吗?
--可以。
采纳答案,有一些错误的概念。

(1)ADD A,@R1 将RI表示的地址里面的数据0DDH与数据A:78H相加,得A为165H;
(2)SUBB A,#77H 累加器A里的内容减去70H后,这个立即数再赋值给A,得A为0DEH;
(3)MUL AB A与B相乘后赋值给A,即A=A04H;
(4)DIV AB A与B相乘后赋值给A,即A=A/04H;
(5)ANL 78H,#78H 78H单元里的数0DEH与立即数78H与后赋值给78H单元
(6)ORL A,#OFH A寄存器的数与立即数OFH或后赋值给A
(7)XRL 80H,A A寄存器的数与立即数OFH异或后赋值给A
大概就是这些了,详细的自己慢慢分析吧!
还有 67H+AOH=107H 怎么算的?=107H
67H、A0H为十六位进制数,A0H中的A表示是十进制的10,所以这样的话,67H表示为十进制数就是616+7,A0H表示为十进制数就是1016+0两数之和就是263,然后用263除以16,算算刚好是107H。107H表示的10进制数值为11616+7
理解?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12944898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存