打印
[STM8]

请教香版及各位高手,两种写法编译后为什么差别这么大

[复制链接]
2093|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tieguanyin2008|  楼主 | 2010-9-22 18:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tieguanyin2008 于 2010-9-22 18:28 编辑

内存中两个8位变量,存在数组中buffer[0], buffer[1], 想将这两个八位的变量合成为一个16位全局变量u16_Temp1, buffer[0]作为高八位,buffer[1]作为低八位

第一种写法:
u16_Temp = (u16)(((u16)(buffer[12]) << 8) | (u16)(buffer[13]));        //高位在前(低地址放高8位)
汇编代码为:
6624  002c 7b07              ld    a,(OFST-10,sp)
6625  002e 97                ld    xl,a
6626  002f 1f01              ldw    (OFST-16,sp),x
6627  0031 5f                clrw    x
6628  0032 7b06              ld    a,(OFST-11,sp)
6629  0034 97                ld    xl,a
6630  0035 7b02              ld    a,(OFST-15,sp)
6631  0037 01                rrwa    x,a                            //看代码到这步x中结果为正确
6632  0038 1a01              or    a,(OFST-16,sp)
6633  003a 01                rrwa    x,a                            //不知为什么又循环移位一次
6634  003b bf77              ldw    _u16_Temp,x          //分析后觉得结果不对

第二种写法:
u16_Temp = ((u16)(buffer[0]) << 8) | buffer[1];    //高位在前(低地址放高8位)

7938  0028 7b07              ld    a,(OFST-122,sp)
7939  002a 97                ld    xl,a
7940  002b 7b08              ld    a,(OFST-121,sp)
7941  002d 02                rlwa    x,a
7942  002e 1f05              ldw    (OFST-124,sp),x        //跟要求一样

这两种写法为啥结果差这么远呢?
沙发
32446975| | 2010-9-30 11:17 | 只看该作者
楼主用的什么编译器?  IAR for STM8?

使用特权

评论回复
板凳
tieguanyin2008|  楼主 | 2010-10-2 11:59 | 只看该作者
COSMIC

使用特权

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

本版积分规则

15

主题

90

帖子

1

粉丝