本帖最后由 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 //跟要求一样
这两种写法为啥结果差这么远呢? |