C51 shift 右移 8 Bit
在寫C51時,常常需要選取 int 的High Byte ,
也就是 int的 bit15 - bit8。
示範幾總不同宣告跟不同寫法經由Keil 所合成出來的結果。
1.
c51
unsigned int sample_a = 0x1234 ;
sample_a = sample_a >> 8 ;
asm
EC MOV A,R4
FD MOV R5,A
7C00 MOV R4,#00H
2.
c51
int sample_b = 0x1234 ;
sample_b = sample_b >> 8 ;
asm
EA MOV A,R2
FB MOV R3,A
33 RLC A
95E0 SUBB A,ACC
FA MOV R2,A
3.
c51
#include <intrins.h>
unsigned int sample_c = 0x1234 ;
sample_c = _iror_(sample_c,8);
asm
7808 MOV R0,#08H
AF82 MOV R7,DPL
AE83 MOV R6,DPH
EF MOV A,R7
08 INC R0
8006 SJMP ?C0236
?C0235:
A2E0 MOV C,ACC.0
CE XCH A,R6
13 RRC A
CE XCH A,R6
13 RRC A
?C0236:
D8F8 DJNZ R0,?C0235
8E83 MOV DPH,R6
F582 MOV DPL,A
結論:
除非需要做Rotate,不然不要用 way 3
Way 1 比 Way2 少兩個指令,所以除非需要真的需要用到sign,不然宣告時使用 unsign
Key word: 8051 C51 ASM RR RRC keil
留言
張貼留言