打印

什么情况下会是右移呢?

[复制链接]
608|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuhany|  楼主 | 2015-6-14 21:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//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; 什么情况下会是右移呢?

相关帖子

沙发
jiahy| | 2015-6-14 21:35 | 只看该作者
//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; 什么情况下会是右移呢?

使用特权

评论回复
板凳
lizye| | 2015-6-14 21:36 | 只看该作者
好办:  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| | 2015-6-14 21:36 | 只看该作者
编译器会根据位变量在字节中的位置进行相应方向的移动。

使用特权

评论回复
5
jiaxw| | 2015-6-14 21:36 | 只看该作者
简单:
AD_Value >>=1;

使用特权

评论回复
6
wuhany|  楼主 | 2015-6-14 21:36 | 只看该作者
AD是串口接收的,16位,低位在前,我想右移进 AD_Value

使用特权

评论回复
7
jiaxw| | 2015-6-14 21:36 | 只看该作者
干吗要右移?这个RLC的目的是把AD_OUT移到A中。

使用特权

评论回复
8
spark周| | 2015-6-14 21:37 | 只看该作者
很多时候这只是为了让愚蠢的编译器产生你所需要的汇编而已。

使用特权

评论回复
9
liliang9554| | 2015-6-14 21:37 | 只看该作者
需要标准移位操作的话我发的例程可以啊

使用特权

评论回复
10
wuhany|  楼主 | 2015-6-14 21:37 | 只看该作者

嗯,呵呵,多谢

使用特权

评论回复
11
angerbird| | 2015-6-15 19:02 | 只看该作者
这个怎有汇编语言的呢?汇编的话又关门的关键字的。

使用特权

评论回复
12
tongbu2015| | 2015-6-20 14:53 | 只看该作者
设么意思的啊?右移处理的一般都是在数据的类型变换的时候用。

使用特权

评论回复
13
尤彼卡| | 2015-6-22 20:18 | 只看该作者
不太明白啊,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

879

主题

10435

帖子

4

粉丝