Ahoj, potřeboval bych, aby někdo, kdo tomu hodně rozumí, porovnal tyhle tři procedury pro zápis bodu na obrazovku.
Jde mi o co nejvyšší rychlost. Program je v Pascalu a funguje tak, že se ve for cyklu (for k:=...to...do) do proměnné barva načte barva daného bodu (ta je uložena v poli bodů (bytů)). Celé to funguje ve VESA 800x600x256.
1) asm
jmp @dal
@vid:
dw $0,$a000
@dal:
les di,cs:[offset @vid]
mov di,k
mov al,barva
mov es:[di],al
end;
2) asm mov di,k; mov ax,$a000; mov es,ax; mov al,barva; mov [es:di],al end;
3) Mem [$a000:k]:=barva;
Předem dík
Fórum › Assembler
Vykreslování v assembleru
Huh!
Myslím, že tohle nebude kritické "hrdlo láhve" v tvém programu. Raději se zaměř na optimalizace na vyšší úrovni. Jak vypadá tvůj algoritmus na vykreslení obrázku? Jak kreslíš čáru? Jak počítáš viditelné plochy? atd...
Taky nezapomeň, že v režimu 800x600x256 musíš přepínat tzv. banky.
Nicméně - assemblerové rutiny pracují nejrychleji, když je přistupuješ do paměti přes registr DS.
např. MOV DS:[SI],AL je o chlup rychlejší než MOV ES:[DI],AL
Jde o to, že DS je defaultní segmentový registr, a když použiješ jiný, tak se ve strojovém kódu objeví tzv. prefix záměny segmentu, jehož zpracování si vyžádá pár pidisekund navíc. V pascalu to ale využít moc nemůžeš, protože pomocí DS pascal vidí globální proměnné, takže ho nemůžeš beztrestně měnit. Musel bys ho ukládat a obnovovat, což by si vyžádalo určitý čas.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Quicksort v assembleru — založil myšák
Zaciname v Assembleru — založil trebuk
Dobrá kniha o Assembleru — založil blop
Prekad súboru do assembleru — založil Kent
Uloha z Assembleru (8086) — založil Sunny