如果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,那么实际延时时间=61us1、由于是用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
理解?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)