everyone

    1. TEST_NUM  EQU 12345   ORG 000H     MOV R2, #LOW(TEST_NUM) ; #11111111B     MOV R3, #HIGH(TEST_NUM); #11111111B ; 65535     CALL BIN2BCD     SJMP $ ;================================== BIN2BCD:     ;--------------------------------------*     ;Input:  R3:R2 --- 16 bits bin         |     ;                R2--Bit 0 to bit 7    |     ;                R3--Bit 8 to bit 15   |     ;Output: R7:R6:R5 --- 5 Dig Packed BCD |     ;                     R5: 个位/十位    |     ;                     R6: 百位/千位    |     ;                     R7: 万位         |     ;Usage:  PSW (C, AC, OV), Acc, B       |     ;                                      |     ;PS: 61 CYs only.  73 bytes            |     ;           DengMiao  2007-4 Guangzhou |     ;--------------------------------------*     MOV A, R2     ANL A, #00000011B     MOV R6, A     ; R6 --- *1  (bit 0 to bit 1) (2 bits)            MOV A, R3     RRC A     MOV B, A     MOV A, R2     RRC A     MOV C, B.0     RRC A     MOV R7, A    ; R7 --- *4  (bit 2 to bit 10) (8 bits)       MOV A, #25   ; 25 * 4 = 100     XCH A, B     RR A     ANL A, #00111111B     MOV R5, A    ; R5 --- *1024 (bit 11 to bit 15) (6 bits)     RL A     ADD A, R5     XCH A, R7    ; R7 == 3 * R5   (
    2. 优化                       一般     MOV A, R3                  MOV A, R3     RRC A                      CLR C                                RRC A     MOV B, A                   MOV B, A     MOV A, R2                  MOV A, R2                                XCH A, B     RRC A                      RRC A     MOV C, B.0                 XCH A, B                                CLR C     RRC A                      RRC A     XCH A, B                   XCH A, B     RR A                       RRC A     ANL A, #00111111B          XCH A, B     MOV R5, A                  MOV R5, A     RL A                       RL A     ADD A, R5                  ADD A, R5     XCH A, B                   XCH A, B ;--------------------------------------
    3. 把16bits, 分为3段:     X -- Bit 10 到 Bit 15, 共 6 bits; (0 - 63)      *1024     Y -- Bit 2 到 Bit 9,   共 8 bits; (0 - 255)     *4     Z -- Bit 0 到 Bit 1,   共 2 bits; (0 - 3)       *1可得到:     1024 * X + 4 * Y + Z   = 1000 * X + 24 * X + 4 * Y + Z   = 1000 * X + 4 * ( 6 * X + Y ) + Z   = 1000 * X + 4 * [ Y + (3*X) + (3*X)] + Z  其中 X 的范围为 0 -- 63, 那么(3*X)的范围就为 0 -- 189, <255 (1 byte)Y+(3*X) 如进位就 X 加1, [Y+(3*X)]-256 加 6, (因为 24 = 4 * 6).另外, {[Y + (3*x)] - 256}+6 < 255 .  = 1000 * (X+i) + 4 * {[Y + (3*x) + (3*x)] + 6 * i } + Z  =   1000 * (X+i)     + 100 * {[Y+3*X+3*X+6*i] \ 25 }     + 4 * {[Y+3*X+3*X+6*i] MOD  25 }  + Z其中   i          范围为    0 -- 2     {[Y+3*X+3*X+6*i] \ 25 } <= 10     4 * {[Y+3*X+3*X+6*i] MOD  25 }  + Z <= 99

最近访客

< 1/1 >

统计信息

已有54人来访过

  • 芯积分:--
  • 好友:--
  • 主题:1
  • 回复:3

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言