Kezdőoldal » Számítástechnika » Programozás » Assemblyben hányszor gyorsabb...

Assemblyben hányszor gyorsabb közvetlen videómemóriába való írással megtölteni a képernyőt egy színnel grafikus,320x200-as 256 színes módban, mint BIOS int 0x10-es videómegszakitással eljátszani ugyanezt?

Figyelt kérdés
2015. febr. 2. 19:04
 1/8 anonim ***** válasza:
Nem értek asm-hez, de találtam egy srácot, aki hasonlókon törte a fejét még régebben: [link]
2015. febr. 2. 19:20
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
(Hogyan lehet, akár assemblyben, megkerülni a virtuális memória kezelést, és közvetlenül elérni a memóriát? :o)
2015. febr. 4. 12:52
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:

A videómemória kezdőcíme alfanumerikus videomódban (80x25 text mode) 0xB8000.

Ettől a címtől számolva minden páratlan című offszettbe kell írni a kiírandó karakter értékét, minden páros című offszetbe kell a karakter attribútumát (karakter háttér-, illetve foreground színe).

Igazából arra lennék kíváncsi, hogy ha ezt a metódust alkalmazom, akkor hányszor gyorsabb a dolog, mint amikor ah-ban 0x0e teletype BIOS function numbert adom meg, al-ben a kiírandó karaktert, majd int 0x10 videointerruptal (ami persze egyes regiszterek lementését, valamint az utasítás tényleges végrehajtását, majd a registerek restore-olását takarja) megjelenítem a karaktert , vagy graphics mode-ban a pixelt a képernyőn.Természetesen fontos tudni, hogy az APA (All Points Addressable/grafikus mode), illetve az A/N (AlfaNumerikus/szöveges videomode) videomemóriájának címe máshol kezdődik (A/N: 0xB8000 , APA: 0xA0000).

2015. febr. 4. 19:18
 4/8 A kérdező kommentje:
A memóriaszervezés szegmentált módon történik(válasz az előttem lévő "válaszadó" kérdésére, úgy mint az előző kommentem is) A memóriában négy fő,egyenként 64 KB-os részegység, úgynevezett szegmens található(kód-, adat-, verem-, illetve extended szegmens). Úgy lehet a memória valódi címére hivatkozni hogy megadjuk a kezelni kívánt szegmens típusát (CS, DS, SS, ES), majd utána kettőspont, majd a hozzávetőleges (offszet) címet adjuk meg konstanssal, vagy valamelyik regiszterrel (legálisak: BX, BP és még van egy pár de nagy részét a processzor magáévá teszi pl.: IP regiszter). A kód-, illetve veremszegmenset ne nagyon piszkáljuk, mert az befolyásolhatja a programunk működését, természetesen ha értesz hozzá, szabad az út. Azt is fontos tudni, hogy pl.: a Pascal vagy C programozási nyelvek a függvények paramétereinek tárolását, illetve a függvény lefutása után kapott érték visszaadását (visszatérési érték) a verem manipulációjával éri el.
2015. febr. 4. 19:34
 5/8 anonim ***** válasza:

#3, azt én tudom, mert én is írtam ilyen kis progikat... DOS alatt !! Egy mai op.rendszeren ez csak valami DOS kompatibilis módban oldható meg, az meg kicsit sem lesz gyorsabb mint a rendszerhívások.


#4, Az egész leírásban végig virtuális címek szerepelnek, nem fizikai címek. Ez a lényege a processzor védett módjának, hogy a felhasználói programok nem tudnak fizikai címeket használni. A DOS valós módban működtette a processzort, ezért ott programok a valós fizikai címeket látták közvetlenül. A mai komolyabb op.rendszerek egyike sem használja valós módban a procit.

2015. febr. 4. 20:55
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

Ha oprendszer alatt írsz, persze hogy nem tudsz fizikai címet használni, mert a rendszer automatikusan állítgatja a szegmensregisztereket minden egyes program lefutásakor, hogy a felhasználónak ne kelljen vele külön bajlódnia.De ha te magad írsz oprendszert, ahogy én mostanában csinálom, akkor muszáj te magad közbelépned, mert a BIOS-nak (mert nem tudsz semmilyen környezetre támaszkodni pl.:OS) nincs memory management-je, ezért te magad állíthatod a szegmenseket sőt, itt már tényleg fizikai címeket használhatsz adatmozgató (MOV), illetve vezérlésátadó utasításokkal (JMP, CALL, RET, IRET), ha saját memory management-re vágysz akkor ne DOS vagy egyéb OS alá írj programot, hanem irjál egy bootloadert, amivel gyakorlatilag áthágsz mindent és te diktálsz, mert nincs OS.

Ha érdekel, akkor röviden leírhatom, mert nem túl nehéz, sőt ajánlhatok egyéb irodalmat is, ha még nem csináltál ilyet.

2015. febr. 5. 04:28
 7/8 anonim ***** válasza:

Ja hogy kernel space-ben futó folyamatról van szó? Azt nem írtad.

De ha annyira jó vagy, akkor tudod, hogy a rendszerhívás és a visszatérés mennyi időbe tellik. (Doksik akár pontosan megadják gépi ciklusban vagy órajelciklusban.) Na kb. annyival lesz gyorsabb, ha egy szó írásáról beszélünk.

2015. febr. 5. 14:32
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Ma én magam is kipróbáltam a közvetlen videomemóriába írást grafikus módban, és nyolcszor, sőt, akár tízszer gyorsabban ír át 64000 pixelt, mint a BIOS int 0x10-je :)
2015. febr. 5. 22:12

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!