írta a következő üzenetben: ...
> Szuksegem lenne egy olyan rutinra, ami S3 (Trio , de inkabb Virge)
> kartyan a lapozast elvegezne (lekerdezes es beallitas is).
> ...
> Esetleg erdekel valamilyen VESA-s megoldas is, ha az nyujt valami
> hasonlo szolgaltatast.
Egy jo regi VESA-s megoldas lehet:
mov ax,4f05h
xor bx,bx
mov dx,lapszam
int 10h
peppin
|
On 3 Oct 98 at 16:15, > wrote:
> Hali!
szia!
> > asm-hez mit szolnal? :))
> En nagyon orulnek neki! :) de tenyleg.
Semmi kulonos, ugyanaz az algoritmus, amit tegnap C-ben megirtam,
csak asm-ben az egesz. Ha nagyon kell, kivagom a kornyezetebol (egy
makroprocesszor), de szerintem egyszerubb a C kod alapjan megirni :)
> En is a napokban fejlesztek kif. kiertekelot, a BAssPasC 3.0-hoz,
> a kulonbseg annyi hogy nekem nem a kif. erteket kell kiszamolnom
> hanem asm forrast kell generalni ami majd futaskor ksizamolja!
> (ha csak kiszamolni kene, az megy, az nem olyan nehez)
Forraskodot generalni se nehezebb optimalizalas nelkul, legalabbis,
ha stack-es az aritmetikai processzor (mint pl. az intel FPU). Csak
annyi a kulonbseg a kodban, hogy ahol return-olod a konstans vagy a
valtozo erteket, ott a stack-be load-olo utasitast generalsz, ahol
meg a muveletet vegzed vele, ott is a megfelelo utasitast generalod
be. Tehat pl. ami igy szolt:
reszeredmeny += exprMD();
Abbol ez lesz:
exprMD();
gen("faddp st(1),st");
Ebbol persze nem valami jo kod lesz, optimalizalni kell meg. Azt
viszont lehet kesobb is, mar a generalt asm utasitasok (vagy meg
inkabb a generalt pseudo-kodok) lokalis optimalizalasaval (szomszedos
utasitasok osszevonasa, stb.)
> kifejezes='3+x+5'
[...]
> pedig igy is ugyanazt az eredmenyt adna es egyszerubb (gyorsabb):
> FLD Const_8
> FADD x
Ehhez valami olyan optimalizalas kellene, ami a load-olasok
sorrendjet modositja az aznonos precedenciaju kommutativ
muveleteknel. Pl. 3+x+5-bol elso kozelitesben (optimalizalas nelkul)
ilyen pseudokod lenne:
load 3
load x
add
load 5
add
(forditott lengyel aritmetika)
Itt az egymas utani ket add egymas melle hozhato:
load 3
load x
load 5
add
add
A load-okat pedig sorba lehet rendezni ugy, hogy eloszor a
valtozok, utana a konstansok alljanak (nem irom le...), es ott mar
egyszerusitheto a ket konstans osszeadasa az osszeg load-olasaval:
load x
load 8
add
Es ebbol generalhato a vegleges kod, szinten generalas kozbeni
optimalizalassal, vagyis, hogy egy [load valt, load konst, add] olyan
intel utasitasokkal kodolhato, hogy [fld konst, fadd valt].
> Ezt lehet tovabb bonyolitani is, pl: '(x+y+z)-(x-y+z)'
> mert ez ugye 2*y-al egyenlo...
Ha ilyet is optimalizalni akar az ember, azt is biztos megteheti a
pseudokodok lokalis vizsgalataval, ha a load-olasokat sorba rendezi a
valtozo neve szerint is...
Nem csinaltam meg ilyeneket, csak ugy belegondoltam kicsit :)
Remelem, adtam azert vele valami otletet ;)
Egyebkent hallottam valamikor, hogy nem stack-es gepre is szoktak ugy
kifejezeskiertekelot optimalizalni, hogy eloszor megcsinaljak egy
stack-es pseudo-gepre, aztan az optimalizalt eredmenybol generalnak
regiszteres kodokat.
István
-- Istvan Marosi -- http://www.sch.bme.hu/~marosi --
-- Recosoft Ltd. -- mailto: --
|