打印

**,实在是强啊…………小弟我佩服佩服~~~!

[复制链接]
楼主: ztzer
手机看帖
扫描二维码
随时随地手机跟帖
41
dengm| | 2008-12-17 22:43 | 只看该作者 回帖奖励 |倒序浏览

14 CYS 76 BYTES, 太长了. 还是LJM810010的算法有〖创新〗!

SUB_CANV:
        MOV B, A            ;1
        ANL A, #00111111B   ;2
        CJNE A, B, L2       ;4
          ; 00XX-XXXX
          ANL A, #00001111B ;5
          CJNE A, B, L1     ;7
            ;0000-XXXX
            ADD A, #(DT_TAB1-$-3) ;8
            MOVC A, @A+PC     ;10 SSSS-0000
            SWAP A            ;11
            NOP               ;12
            RET


L1:     ;00??-XXXX
         ADD A, #(DT_TAB2-$-3) ;8    
         MOVC A, @A+PC         ;10  0001-XXXX
         ORL A, B              ;11
         NOP                   ;12
         RET


L2:     ;??XX-XXXX
        ANL A, #1111B ;5
        JZ L3             ;7
          ;??XX-XXXX
          ADD A, #(DT_TAB2-$-3) ;8
          MOVC A, @A+PC         ;10  0001-XXXX
          ORL A, #01110000B     ;11
          ORL A, B              ;12
          RET

L3:     ;??XX-0000B ;7
         MOV A, B ;8
         SWAP A   ;9
         ADD A, #(DT_TAB1-$-3) ;10
         MOVC A, @A+PC         ;12  ;SSSS-0000
         RET

DT_TAB1:
       DB 00000000B ;0000
       DB 00010000B ; 0001
       DB 00100000B ; 0010
       DB 00110000B ; 0011
       DB 01000000B ; 0100
       DB 01110000B ; 0101
       DB 01100000B ; 0110
       DB 01110000B ; 0111
       DB 10001000B ; 1000
       DB 11110000B ; 1001
       DB 11100000B ; 1010
       DB 11110000B ; 1011
       DB 11000000B ; 1100
       DB 11110000B ; 1101
       DB 11100000B ; 1110
       DB 11110000B ; 1111

DT_TAB2:
       DB 00000000B ;0000
       DB 00011111B ; 0001
       DB 00011110B ; 0010
       DB 00011111B ; 0011
       DB 00011100B ; 0100
       DB 00011111B ; 0101
       DB 00011110B ; 0110
       DB 00011111B ; 0111
       DB 00011000B ; 1000
       DB 00011111B ; 1001
       DB 00011110B ; 1010
       DB 00011111B ; 1011
       DB 00011100B ; 1100
       DB 00011111B ; 1101
       DB 00011110B ; 1110
       DB 00011111B ; 1111

使用特权

评论回复
42
ljm810010| | 2008-12-18 00:54 | 只看该作者

呵呵,9周期,79字节

这样下去意义不大了,楼主都没说有什么实际应用的意义。

;===========9周期 79字节=============
Convert:
    mov  r7,a
    anl  a,#3fh
    cjne a,7,L1
    add  a,#(Tab-$-3)
    movc a,@a+pc
    ret
    
L1: mov a,#81h
    subb a,r7
    orl  a,r7
    ret    

Tab:db 00H,01H,02H,03H,04H,07H,06H,07H,08H,0FH,0EH,0FH,0CH,0FH,0EH,0FH
    db 10H,1FH,1EH,1FH,1CH,1FH,1EH,1FH,18H,1FH,1EH,1FH,1CH,1FH,1EH,1FH
    db 20H,3FH,3EH,3FH,3CH,3FH,3EH,3FH,38H,3FH,3EH,3FH,3CH,3FH,3EH,3FH
    db 30H,3FH,3EH,3FH,3CH,3FH,3EH,3FH,38H,3FH,3EH,3FH,3CH,3FH,3EH,3FH

    end

使用特权

评论回复
43
oufuqiang| | 2008-12-18 14:23 | 只看该作者

**,实在是强啊…………小弟我佩服佩服~~~!

使用特权

评论回复
44
dengm| | 2008-12-18 15:05 | 只看该作者

12 CYS 42 BYTES ...这是改 ljm810010 的!!!

;===========12周期 42字节=============
CONVERT:
         MOV R7, A            ;1
         ANL A, #11110000B    ;2
         JZ L2                ;4
           ANL A, #11000000B  ;5
           CJNE A, #0, L1     ;7
             SUBB A, R7       ;8
             ANL A, #00011111B;9
             ORL A, R7        ;10
             RET              ;12 

L1:
             MOV A, #80H      ;8 
             SUBB A, R7       ;9
             ORL A, R7        ;10
L1B:         RET              ;12

L2:
         MOV A, R7           ;5
         ADD A, #(TAB-$-3)   ;6
         MOVC A, @A+PC       ;8
         SJMP L1B            ;10
TAB:
     db 00H,01H,02H,03H,04H,07H,06H,07H
     DB 08H,0FH,0EH,0FH,0CH,0FH,0EH,0FH

;$$$$$$$$$$$$$$$ END OFF SUB CONVERT $$$


;===========13周期 46字节=============
Convert:
    mov  r7,a          ;1
    anl  a,#00111111B  ;2
    cjne a,7,L1        ;4
      ANL A, #00001111B;5
      CJNE A, 7, L2    ;7
        add  a,#(Tab-$-3) ;8
        movc a,@a+pc      ;10
        NOP
        ret               ;12
    
L1:
    MOV A, #(10000000B+1) ;5
    subb a, r7            ;6
    NOP
    NOP
    SJMP L3               ;10

L2:
    mov a,#(11100000B+1)  ;8
    subb a,r7             ;9
    ANL A, #00011111B     ;10 
L3:
    orl  a,r7             ;11
    ret                   ;13

Tab:db 00H,01H,02H,03H,04H,07H,06H,07H,08H,0FH,0EH,0FH,0CH,0FH,0EH,0FH
;$$$$$$$$$$$$$$$ END OFF SUB CONVERT $$$

使用特权

评论回复
45
dengm| | 2008-12-18 15:22 | 只看该作者

最快/最大/难度最低的: 6 CYS 261 BTTES

CANVERT:
       JNZ L1    ;2
         SJMP L2 ;4
L1:
      MOVC A, @A+PC ;4
L2:
      RET           ;6
     ;  DB  00
     DB 1
     DB 2
     DB 3
     DB 4
     DB 7
      ......
      .....
     DB 254
     DB 255

使用特权

评论回复
46
ljm810010| | 2008-12-18 15:39 | 只看该作者

疯了疯了,俺不玩了,再这样下去真的要变欧阳疯了

来个总结,能否用程序的执行时间与代码长度的乘积作为评分标准?如果合理的话,呵呵41楼程序15*32=480比45楼程序12*41=492略胜一筹;不过我总觉得返回指令RET的时间不应算在内,因为过程完了,要返回是以后的事了。如果这样算的话,45楼10*41=410又比41楼13*32=416优胜一点~~~

使用特权

评论回复
47
xwj| | 2008-12-18 16:42 | 只看该作者

拜托,别人要得是12位或者任意多位

使用特权

评论回复
48
oufuqiang| | 2008-12-18 17:28 | 只看该作者

4周期,259字节……

CANVERT:
      MOVC A, @A+PC ;2
      RET           ;4
     DB 1
     DB 2
     DB 3
     DB 4
     DB 7
      ......
      .....
     DB 254
     DB 255

使用特权

评论回复
49
dengm| | 2008-12-18 19:24 | 只看该作者

评分标准: 时间 * 10 + 空间 * 1 = 资源

     时间 * 10  + 空间 * 1     ; 一般用 10 个bytes 换 1 周期比较合理
                               

46楼:  6 * 10 + 261 = 321 (单位资源)
45楼: 12 * 10 + 42  = 162 (单位资源)
43楼:  9 * 10 + 79  = 169 (单位资源)
42楼: 14 * 10 + 76  = 216 (单位资源)
41楼: 15 * 10 + 32  = 182 (单位资源)

45楼与43楼 并列第一 41楼第二





使用特权

评论回复
50
xwj| | 2008-12-18 19:35 | 只看该作者

还得再加上冥思苦想的时间...

绝对是我6楼的观点得第一

使用特权

评论回复
51
dengm| | 2008-12-18 19:43 | 只看该作者

LZ 要12bits 或者任意多位, 可参考 41楼/43楼/45楼..我也不玩了

使用特权

评论回复
52
ljm810010| | 2008-12-18 20:09 | 只看该作者

RE:49楼,你认为46楼的有冗余语句吗?

你程序有BUG。demgn的程序每条指令都隐藏着不可告人的秘密。

使用特权

评论回复
53
xwj| | 2008-12-18 20:55 | 只看该作者

45楼的有BUG

使用特权

评论回复
54
dengm| | 2008-12-18 21:35 | 只看该作者

45楼有Bug, 已从写 bytes 与 cys 不变

;*********  12 周期  42 bytes
Convert:
         MOV R7, A            ;1
         ANL A, #11110000B    ;2
         JZ L2                ;4
           ANL A, #11000000B  ;5
           CJNE A, #0, L1     ;7
             SUBB A, R7       ;8
             ANL A, #00011111B;9
             ORL A, R7        ;10
             RET              ;12 

L1:
             MOV A, #80H      ;8 
             SUBB A, R7       ;9
             ORL A, R7        ;10
L1B:         RET              ;12

L2:
         MOV A, R7           ;5
         ADD A, #(TAB-$-3)   ;6
         MOVC A, @A+PC       ;8
         SJMP L1B            ;10
TAB:
     db 00H,01H,02H,03H,04H,07H,06H,07H
     DB 08H,0FH,0EH,0FH,0CH,0FH,0EH,0FH

;$$$$$$$$$$$$$$$ END OFF SUB CONVERT $$$

使用特权

评论回复
55
dengm| | 2008-12-20 19:58 | 只看该作者

43楼: 9周期,79字节, 可改为 78 字节.

       MOV R7, A
       ADD A, #11000000B 
       JNC L1
         MOV A, #81H
         SUBB A, R7
         ORL A, R7
         RET
L1:
      ADD A, #(0100000B+TAB-$-3)
      MOVC A, @A+PC
      RET             

Tab:db 00H,01H,02H,03H,04H,07H,06H,07H,08H,0FH,0EH,0FH,0CH,0FH,0EH,0FH
    db 10H,1FH,1EH,1FH,1CH,1FH,1EH,1FH,18H,1FH,1EH,1FH,1CH,1FH,1EH,1FH
    db 20H,3FH,3EH,3FH,3CH,3FH,3EH,3FH,38H,3FH,3EH,3FH,3CH,3FH,3EH,3FH
    db 30H,3FH,3EH,3FH,3CH,3FH,3EH,3FH,38H,3FH,3EH,3FH,3CH,3FH,3EH,3FH

使用特权

评论回复
56
dengm| | 2008-12-20 20:44 | 只看该作者

11 CYS 56 BYTES : 用 2 周期换 23 字节. 不练脑了.

       ; 11 CYS  56 BYTES 
CONV:
       MOV R7, A          ;1
       ANL A, #11100000B  ;2
       JZ L2              ;4
         
         CJNE A, #00100000B, L1 ;6
           SUBB A, R7           ;7
           ORL A, R7            ;8
           ANL A, #00111111B    ;9
           RET                  ;11

L1:
        MOV A, #80H  ;7
        SUBB A, R7   ;8
        ORL A, R7    ;9
        RET          ;11

L2:
        MOV A, R7         ;5
        ADD A, #(TAB-$-3) ;6
        MOVC A, @A+PC     ;7
        NOP               ;9
        RET               ;11

Tab:db 00H,01H,02H,03H,04H,07H,06H,07H,08H,0FH,0EH,0FH,0CH,0FH,0EH,0FH
    db 10H,1FH,1EH,1FH,1CH,1FH,1EH,1FH,18H,1FH,1EH,1FH,1CH,1FH,1EH,1FH

使用特权

评论回复
57
ljm810010| | 2008-12-20 20:50 | 只看该作者

呵呵,上面这个应是[终结]版了

周未应去陪女友,怎么还这么多人混坛?哎,搞技术的 ~~

使用特权

评论回复
58
洪七公| | 2008-12-20 20:54 | 只看该作者

密电码~~~

使用特权

评论回复
59
ljm810010| | 2008-12-20 21:59 | 只看该作者

5/3两判,之前也想过,拼凑了几次都不行就放弃了

使用特权

评论回复
60
dengm| | 2008-12-22 22:29 | 只看该作者

[终结]版: 11(周期) 44(字节)

;      11(周期)*10+44(字节)=154   [终结]版 

CONVERT:
      MOV R7, A         ;1
      ADD A, #11011111B ;2
      JC L100           ;4
       ; 0 TO 00100000B 
        JB ACC.4, L80   ;6
          ADD A, #(00100001B+TAB50-$-4);7
          MOVC A, @A+PC ;9
          RET ;11

TAB50:
       DB   1, 2, 3, 4, 7, 6, 7, 8
       DB  15,14,15,12,15,14,15,16
        
L80:          
        CPL A        ;7            
        ANL A, #01FH ;8
        ORL A, R7    ;9
        RET          ;11

L100:
      ADD A, #11100000B ;5
      JC L110           ;7
        CPL A           ;8
        ORL A, R7       ;9
        RET             ;11
L110:
      XRL A, #00111111B;8 
      ORL A, R7        ;9
      RET              ;11


;------------------------------------
12(周期)*10+32(字节)=152
CONVERT8:
      MOV R7, A         ;1
      ADD A,    #11101111B ;2
      JC LL100          ;4
       ; 0 TO   00010000B 
         ADD A, #00001100B
         JC LL80
           MOV A, R7
           SJMP LL90
LL80:
           XRL A, #00001011B
           ANL A, #111B
           ORL A, R7
LL90:
        RET ;12
;=============================
LL100:
      ADD A, #11010000B
      JC LL110
        CPL A
        ANL A, #11111B
        ORL A, R7
        RET  ;12
LL110:
      XRL A, #00111111B           
      ORL A, R7
      NOP
      RET ;12
;-----------------------------      

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则