这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » HotPower,C51 HotPower等熟悉C51的大侠来指导一下

共2条 1/1 1 跳转至

HotPower,C51 HotPower等熟悉C51的大侠来指导一下

院士
2006-09-17 18:14:16     打赏
HotPower,C51 HotPower等熟悉C51的大侠来指导一下



关键词: HotPower     熟悉     大侠     指导     一下    

院士
2006-12-22 22:43:00     打赏
2楼
问     unsigned char ni;

    ni >>=4;

这个语句是什么效果,

我用Keil C51 V7.20 编译,结果如下:

0028 7804              MOV     R0,#04H
002A         ?C0053:
002A A2E7              MOV     C,ACC.7            ;郁闷中...
002C 13                RRC     A
002D D8FB              DJNZ    R0,?C0053

其中,MOV     C,ACC.7   这句是否多此一举?

是否有另一种表达方式可以取消这个 MOV     C,ACC.7,

郁闷中... 1: RE:    unsigned char ni;

    ni >>=4;
这个语句是将ni向右移动4位,高位补0。
从你这个汇编结果来看,并不是这个语句汇编的结果。
而应该是下边这两条语句汇编来的:
signed cahr ni;
ni>>=4;



    unsigned char ni;

    ni >>=4;
汇编的结果应该是:
MOV      A,0x??   ;address of "ni"
SWAP     A
ANL      A,#0x0F
MOV      0x??,A 2: 这应该是个有符号字符数右移的编译结果没什么郁闷的.

0028 7804              MOV     R0,#04H
002A         ?C0053:
002A A2E7              MOV     C,ACC.7            ;取符号位
002C 13                RRC     A;保持4次移位后的符号位不变
002D D8FB              DJNZ    R0,?C0053

我编译的结果:
    11: void main(void)
    12: {
    13: signed char ni =-5;
C:0x0CAE    753BFB   MOV      0x3B,#0xFB
    14:   ni >>= 4;
C:0x0CB1    E53B     MOV      A,0x3B
C:0x0CB3    7804     MOV      R0,#0x04
C:0x0CB5    A2E7     MOV      C,0xE0.7
C:0x0CB7    13       RRC      A
C:0x0CB8    D8FB     DJNZ     R0,C:0CB5
C:0x0CBA    F53B     MOV      0x3B,A


    11: void main(void)
    12: {
    13: unsigned char ni =-5;
C:0x0CD1    753BFB   MOV      0x3B,#0xFB
    14:   ni >>= 4;
C:0x0CD4    E53B     MOV      A,0x3B
C:0x0CD6    C4       SWAP     A
C:0x0CD7    540F     ANL      A,#0x0F
C:0x0CD9    F53B     MOV      0x3B,A

我估计是楼主将signed char ni =-5;改为unsigned char ni =-5;后忘记了编译.

或某个设置选项有问题,重新编译应该就好了.
3: 很可能是bug我是很少使用signed 类型的,声明变量很多都是使用 unsigned ...

这次我实际上是使用一个声明变量为 (unsigned char ni)的函数,最后怎么样也没有办法把这个要传送的参数编译unsigned char 状态。

即使使用强制转换符(unsigned char)也不行。 4: 我也一直用Keil C51 V7.20在做验证时确实发现几次,但好象都没存盘就编译,而且都是从signed改为unsigned的瞬间。

但后来怎么都出不来了,还“有些怪可惜”的。。。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]