|
int i,j,m;
i = 0x00CF;
j = 0xDE43;
m = (i << 8) | (j >> 8);
執(zhí)行后結(jié)果是?
m = 0xFFDE,而不是0xCFDE。
看一下匯編后的指令:
MOV ACC, *-SP[6] << 8 ;ACC = 0x0000CF00
MOV AH, *-SP[5] ;ACC = 0xDE43CF00
ASR AH,8 ;ACC = 0xFFDECF00
OR AH, @AL ;ACC = 0xFFDECF00
MOV *-SP[7], AH ;m = 0xFFDE(返回值)
因為j是整型數(shù),所以右移操作編譯后是帶符號的算術(shù)右移指令 ASR。
把j改為Uint后,右移操作編譯后是無符號擴(kuò)展的邏輯右移指令 LSR。
如果希望得到m = 0xCFDE的結(jié)果,那么可以把i、j、m定義為無符號數(shù):
Uint i,j,m;
i = 0x00CF;
j = 0xDE43;
m = (i << 8) | (j >> 8);
看一下匯編后的指令:
MOV ACC, *-SP[6] << 8 ;ACC = 0x0000CF00
MOV AH, *-SP[5] ;ACC = 0xDE43CF00
LSR AH,8 ;ACC = 0x00DECF00
OR AH, @AL ;ACC = 0xCFDECF00
MOV *-SP[7], AH ;m = 0xCFDE(返回值)
注:MPU為TMS320F2812。
|
|