RE: Dělení 16b:8b na x51

Radek Benedikt benedikt na lphard.cz
Úterý Červen 4 15:21:12 CEST 2013


Zas tak hrozne to neni, tohle pouzivam ja.
Na klasickem procesoru ten DIV zas tolik casu neusetri, u turbo kde je stejne dlouha s beznou instrukci mozna ???
Mam obavy, ze ta omacka okolo toho DIV by byla navíc vetsi nez tohle.

; deleni 2 byte (r2(MSB),r3(LSB))
; deleno 1 byte r6
; vysledek je v (r2(MSB),r3(LSB))
; zbytek po deleni je v (r0(MSB),r1(LSB))
div2x1: CLR     A
        mov     R0,a
        MOV     R1,A
        MOV     B,#16   ;16 bit
div20:  CLR     C
        MOV     A,r3
        RLC     A
        MOV     r3,A
        MOV     A,r2
        RLC     A
        MOV     r2,A
        MOV     A,R1
        RLC     A
        MOV     R1,A
        MOV     A,R0
        RLC     A
        MOV     R0,A
        MOV     A,R1
        SUBB    A,r6
        MOV     A,R0
        SUBB    A,#0
        JC      div21
        MOV     R0,A
        MOV     A,R1
        SUBB    A,r6
        MOV     R1,A
        INC     r3
div21:  DJNZ    B,div20
        ret

Radek (benedikt2hw.cz)

> Jednou jsem to u nejakeho prekladace zkoumal a instrukci DIV nepouzival... 
> Kdyz jsem nad tim premyslel, asi to neni efektivni - instrukce trva 
> dlouho a musi se pouzit vicekrat, v tomto pripade je to na 8 cyklu 
> posuvu a odcitani...
> Deleni 8b cislem je jeste asi predstavitelne (ale asi by se to muselo 
> brat po
> 4 bitech aby se delenec slozeny z dalsich bitu a zbytku vesel do 8b, 
> cili na
> 4x) ale deleni 16b/16b uz me nejak nenapada, jak s pouzitim instrukce 
> DIV rozumne udelat.



Další informace o konferenci Hw-list