Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
...szerintem meg okosságot mondanék, csak továbbra is fenntartom az állitást, hogy 8bites kompatibilitás miatt van igy. Hirtelen arra gondoltam, hogy lehetne cimbusz*adatbusz-nyi táras gépet épiteni az IA32 cpu köré, de sajnos maga a processzor igényli és számitja az adatokat 8bites jelleggel, pl a GDT-ben adott szegmens keresésekor. De alapvetően a CS:IP is 8 bitesen "gondolkodik" amikor az utasitásért nyúl, mert van 1bájtos, de 6-8bájtos utasitás is. Jó tudom, tömbökben olvassa be, nem egyesével (illetve a 8088 egyesével).
Mivel szükség van megcímezni nem csak 4-gyel osztható memóriacímen lévő byte-okat is, ezért amit írsz nem kivitelezhető.
Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
A tankönyvvel semmi újat nem mondtatok.
Ehhez képest elég fura dolgokat írtál
Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
286: Az okézsoké, hogy a szegmens leiró ugyanaz, mint a 386-osban és a base address 32bites (illetve 24), ez igy tök jó, De a DS:[SI] offszettje továbbra is 16bites, amivel csak 64kbyte blokk cimezhető.
286-os descriptorokban csak 16 bites a szegmens limitje: max. 64KiB lehet egy-egy szegmens.
Ezért elegendő a 16 bites regiszerekkel megcímezni.
Az még 16 bites CPU volt.
Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
A 20bites 1b/4Kb granularity flag az effektiv cimszámitásnál nem játszik, az továbbra is bájtos. Csupán a határt szabja meg a szegmensnek.
Igen.
De nem is mondtam mást én sem.
Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
Érdekes ez a 20bites megoldás. 1b sűrűségnél az [ESI] 32bittjéből csak az alsó 20-at engedi, ha a felső 12 valamelyike 1-es, vagyis a szegmens határon túlra cimzett, akkor általános védelmi hiba. Ha 4Kb sűrűség van, akkor az ESI felső 20bittjét teszteli csak, igy 4Gb-ig lát.
Miért csak a felső 20 bitjét???
Granuláris szegmensnél is beállíthatok 1 MB-nál kisebb limitet. Csak nem byte-os, hanem 4KiB-os lépésekben. Lehet akár 4 KiB-os szegmens, ha akarom.
És byte-os limitnél is a limithez kell hasonlítani az offszetet (ahogy írtad: ESI), nem elegendő azt nézni, hogy a felső 12 bit értéke 0 legyen, hiszen nem biztos, hogy 1 MB a limit, lehet kevesebb.
Bizonyára csak kényszerből lett ilyen a megoldás, mert nem fért el a descriptorban 32 bites limit.
Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
Az effektiv address egyébként a leiró base address+ESI szimpla összegzésével áll elő. Ezután teszteli a limitet. ...(ötlet-amit nem ir6ok le)...
Az intel aszondja, jobb a base addresst is - nemhogy 4bájt - 16 bájt határra pakolni, ami azt jelenti, hogy x0000h-val kezdődék.
A 16 byte határnál csak az utolsó hexa számjegy 0. Amit Te írtál, az 64KiB-os határ.
Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
Visszatérve a 286-osra. Igen, a base address tényleg ellát 16megáig, de az offszet továbbra is 16bites, vagyis 1 szegmens 64Kbyte lehet. A másik variáció, hogy a 1b/4Kb sűrűséget értelmezi máshogy, és... de ez sem jó, most rájöttem. Persze 16bites offszettnél a 4Kb-s 20bites limiter is értelmetlen, mert 16bitet hova maszkoljon. Jó majd belenézek a 286-os iozébe ha nagyon unatkozok.
A 286-osnál nem volt még granularity (1b/4Kb): ott byte határt lehetett mondani 16 biten: azaz minden szegmens maximális mérete 64KiB volt.
Logikus is valamennyire, hiszen nem voltak 32 bites regiszterek, amivel megcímezhető lett volna a 64KiB fölötti rész.
Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
És tisztába vagyok a cimzéssel, csak ti nem értitek, mit akarok mondani. Kikérem magamnak! Megsértődtem!

Értem, hogy mit akarsz mondani.
De a Te módszereddel csak minden 4-gyel osztható címet lehetne megcímezni.
Idézet: Samuraj - Dátum: 2010. 03. 20. 12:17
A 32Gb tár egy jó elgondolás volt, e hiányába viszont a rendszerben van ez a 8bites cimkonverzó, ami valamellyest teljesitmény visszafogó. Nem baj, ha nem értetek 1et, tényleg könyvet lehetne erről irni, de most ettől eltekintek.
Jó elgondolás volt, csak a valóságban nem így működik

Nincs semmiféle címkonverzió ... A 386-os CPU 4 byte-os adatokat olvas be egyszerre, a "konverzió" csak annyi, hogy a memória felé a címbusz alsó 2 bitje mindig 0, ezáltal a memória mindig 4-gyel osztható címeket kap, ahonnét visszaad 32 bitet. (Persze a processzorban megvan az a két bit is, hiszen belül már csak a szükséges részt --adott byte, word, vagy az egész dword-- használja fel a kapott 32 bitből)
Amit írsz, abból látszik, hogy a tudásod elég homályos, halovány az x86-os címzés pontos minkéntjében. Valami dereng, de kevered a valóságot saját Magad által kitalált vagy kigondolt dolgokkal.
Így nem fogsz tudni okosat mondani, mert ha nem látod pontosan a részleteket, akkor egy rossz ötlet is tűnhet jónak.
Szerkesztette: Sparow2 2010. 03. 20. 23:34 -kor