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