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

留言

熱門文章