什么情况下会是右移呢?

2019-07-15 16:15发布

//I/O定义
sbit AD_DOUT  P1^5;
...
...
//语句
signed int AD_Value;
...
AD_Value |= AD_DOUT;
...

//反汇编结果如下:
    74:         AD_Value |= AD_DOUT;
    75:  
C:0x09AC    A295     MOV      C,AD_DOUT(0x90.5)
C:0x09AE    E4       CLR      A
C:0x09AF    33       RLC      A  //左移,什么情况下是右移??
C:0x09B0    4207     ORL      0x07,A

请问语句 AD_Value |= AD_DOUT; 什么情况下会是右移呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
lizye
1楼-- · 2019-07-15 22:07
好办:  CY=AD_DOUT;
        CY=ACC&0X01;  //产生右移指令
        AD_Value=ACC;        
        ……

编译结果:
        MOV          C,AD_DOUT
        RRC          A     ;右移
        MOV          R7,A
        MOV          R6,#00H
;---- Variable 'AD_Value?041' assigned to Register 'R6/R7' ----
shimx
2楼-- · 2019-07-15 22:42
 精彩回答 2  元偷偷看……
jiaxw
3楼-- · 2019-07-16 01:49

简单:
AD_Value >>=1;
wuhany
4楼-- · 2019-07-16 04:41

AD是串口接收的,16位,低位在前,我想右移进 AD_Value
jiaxw
5楼-- · 2019-07-16 06:53

干吗要右移?这个RLC的目的是把AD_OUT移到A中。
spark周
6楼-- · 2019-07-16 12:07
很多时候这只是为了让愚蠢的编译器产生你所需要的汇编而已。

一周热门 更多>