PIC汇编转C时 发现C编译器不给力

2020-02-06 09:48发布

本帖最后由 woshigeshuai 于 2019-4-24 09:45 编辑

                C程序
                ram20^=4;
                if((RB0==1) && (ram20&BIT(3)==0))
                {
                        if(ram29<0X9A)
                                ram29++;
                        if(ram29>=0x9c)
                                ram29--;                        // need test
                        ram20|=BIT(3);
                }
               
                实际运行的,第二个判断条件居然没有
                 movlw   4
                xorwf   byte_DATA_24, f

                btfss   PORTB, RB0
                 bcf     byte_DATA_24, 3
                movfw   byte_DATA_29
                xorlw   9D
                bnz     loc_CODE_23F

                ; ---------------------------------------------------------------------------------------
                测试使用下面的方法可以

                ram20^=4;
                if(RB0==1 && ram203==0)
                {
                        if(ram29<0X9A)
                                ram29++;
                        if(ram29>=0x9c)
                                ram29--;                        // need test
                        ram20|=BIT(3);
                }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
woshigeshuai
1楼-- · 2020-02-07 03:56
 精彩回答 2  元偷偷看……
z7001
2楼-- · 2020-02-07 04:36
我想知道楼主怎么将汇编转C的?
    难道是人工智能转换   
woshigeshuai
3楼-- · 2020-02-07 08:38
techbaby 发表于 2019-4-24 09:38
== 优先级高于 &
所以,编译器给优化掉了

感谢回复,刚看的时候没明白你的意思。后来明白了
woshigeshuai
4楼-- · 2020-02-07 12:27
lcw_swust 发表于 2019-4-24 09:54
ram20&BIT(3)要加括号
否则变成
ram20 & (BIT(3)==0)

谢谢,通过这次更加深了对括号的认知
woshigeshuai
5楼-- · 2020-02-07 13:57
z7001 发表于 2019-4-24 11:39
我想知道楼主怎么将汇编转C的?
    难道是人工智能转换

转的不多,人工处理。很多就搞不了
mon51
6楼-- · 2020-02-07 18:37
 精彩回答 2  元偷偷看……

一周热门 更多>