Hogyan programozhatsz gépi kódban?
Hogyan futtathatod le a kódot, illetve hogyan kommunikálhatsz a processzorral bármiféle IDE nélkül, csak gépi kódban.
Tehát ugyebár, például az Assembly áll a legközelebb a gépi kódhoz, és mondjuk az ADD utasításnak az op code-ja ugyebár 0001 ---- ---- ---- (---- operandus stb, az most mindegy). Ez rendben van. Akkor hogyan lehetne a 0001 utastást a processzornak kiadni?
""A kolléga leírta, hogy a COM-ot a mai Windowsok már nem támogatják."
De ez kit érdekel? Az emulátor vagy a DOSbox támogatja, futtatja.
Na csá.."
Komolyan itt már te is beismered, hogy totál nem érted a szavakat. Leírtuk, hogy a windows nem támogatja. Majd leírod, hogy "kit érdekel" (tehát nem is érdekel téged az egész amiről beszélünk, akkor miért ugatsz bele). A kérdező azzal kezdte, hogy lehetőleg mindenféle egyéb nélkül, erre már mindenféle emulátort, meg DOSBox-ot akarsz telepíttetni vele, és közben meg leírod, hogy nem is érdekel az amiről beszélsz. Édes burgonyás térdzokni, te elképesztően sötét lehetsz nem csak az informatikához, hanem úgy általában mindenhez.
"Ha ez nem 16 bites utasítás akkor mi az?"
Az operandus 16 bites, nem az utasítás.
Ugyanez az aritmetikai esetében is.
olvasd:
"A Z80 a rendelkezésre álló 256 kódból 252-t használ egybájtos opkódként (ezek az ún. „gyökérutasítások” v. alaputasítások); a fennmaradó négy kódot opkód-prefixumként (előtagként) használja"
"A címgenerálás meg úgy néz ki, hogy ott a 16 címbit, ezt 16-tal (10h) felszorzod (eltolás éppen 4 bittel. Figyelsz???) majd hozzáadod a többi négy (jé! Itt is négy! Figyelsz???) címbit tartalmát. Így jön ki a 20 bites cím."
Hát kedves burgonyás térdzokni, itt megint sajnos egy jól ellenőrizhető hazugságot állítasz. Márnem is tudom hanyadik a sorban (lassan számolni sem tudom).
Idézet az Intel "The 8086 Family User's Manual" c. dokumentumából (a neten is megvan több helyen, nekem papiron van most a kezemben):
"Physical address is the 20-bit value that uniquely identifies each byte location in the megabyte memory space" (ez OK, ezt eddig te is leírtad), de olvassunk tovább:
"Segment base and offset values are unsigned 16-bit quantities" Itt jön be a következő hazugságod, mert sehol nem szerepel 4 bit, pont azt írja (és még vagy 2 tucat helyen) a gyártó! (nem én, a gyártó), hogy mind a szegmens regiszter mind az ofszet 16 bites. Hol látsz te itt 4 bitet?
Majd még tovább olvasunk "Many different logical address can map to the same physical location" (azaz ugyanazt a fizikai címet több szegmens-ofszet érték párral is el lehet érni (tiszta sor, továbbra sincs 4 bit sehol a szövegben).
És akkor itt jön a következő bekezdésben a lényeg:
"Whenever the BIU accesses memory - to fetch an instruction or to obtain or store a variable - it generate a physical address from a logical address". Tehát a BIU (Bus Interface Unit, busz kezelő egység) amikor a memóriához szándékozik hozzáférni (utasítás lehívás, vagy egy adat tárolás - a logikai címeket átalakítja fizika címekké.
"This is done by shifting the segment base value four bit positions and adding the offset as illustrated in figure 2-18." Ezt úgy végzi, hogy a szegmens bázis értéket eltolja 4-el (ez megfelel 16-al szorzásnak, ezt még nagy nehezen sikerült eltaláljad) majd hozzáadja az ofszet értéket.
Ha ezt sikerül befogadni akkor látod, hogy egyetlen egy helyen szerepel 4-es a műveletben, egy 4-el shiftelés ami egy 16-os szorzás. A teljes 16 bites szegmens regiszter érteket szorozza 16-al (tolja el 4-el) és ehhez a teljes 16bites ofszet értéket adja hozzá. Nem 4 bitet az ofszetből, ahogy te hazudtad az imént. Innen látszik, hogy te vagy teljesen fogalmatlan. És írsz össze vissza mindent aznélkül, hogy bármit is értenél hozzá. És kiemelem, hogy amit itt leírtam nem én találtam ki, hanem az Intel gyári gépkönyvében szerepel.
Vissza kanyarodva a gépkönyvhöz, a következő bekezdésekben már azt tárgyalja, hogy milyen jellegű műveletekhez melyik szegmens regiszter értéket használja, itt kap jelentést az amit egyszer már beböfögtél de azt is teljesen értelmetlenül, hogy mi a CS, SS, DS, ES. A CS-t használja az utasítás cím meghatározásához, a PC-vel együtt. Azaz úgy alakul ki egy utasítás címe, hogy a CS 16 bites értéket szorozza 16-al és a teljes PC-t hozzá adja. Nem csak 4 bitet bármelyik regiszterből, két 16 bites regiszterrel számol. OK, ezt mindenki tudja (de le is írja valahol az Intel, de most nincs időm megkeresni), hogy a 4-es eltolás miatt a szegmens regiszterek gyakorlatilag csak 12 bitesek, a felső 4 bit úgy viselkedik mintha fixen 0 lenne bennük, de nem kötelező, hogy ott csak 0-k legyenek.
"Az ALU kussol, a szegmens regisztereket a Sín illesztő egység (BIU) kezeli.
Amiről te beszélsz, (tömb index, stb) ahhoz ott vannak az index regiszterek."
Hol írtam, hogy a szegmens regisztereket az ALU kezeli? És hogy kerülnek ide az index regiszterek.
Olvasd már el kedves burgonya, hogy mit írtam ténylegesen. Valószínűleg túl komplikáltan fogalmaztam, és így egy burgonya nem képes megérteni. Tehát amit írtam, hogy a 16 bites műveletek nem segítik azt, hogy egy tömbben tudjunk számolni. Megint sehol nem írtam, hogy ebból hogyan lesz fizikai cím (egyáltalán cím, meg index regiszter meg stb.). Eleve ott kezdődik, hogy "számold ki a következőt: van egy 512 elemű tömb, a tömb minden eleme 2 bájtos. Hanyadik bájton kezdődik a 439. elem?" Ez elég egyszerű ha vannak 16 bites utasításaink, mert a kezdőcím 2x439=878 lesz (és itt jóindulatú voltam mert 2byte-os elem méretet írtam, és a 2-vel szorzást egy shift művelettel el tudjuk végezni). Ha nincsenek csak 8 bites utasításaink, akkor ennél azért valamennyivel bonyolultabbá válik a feladat. Ha a feladatot megbonyolítom és azt mondom, hogy minden tömb elem 5 byte; akkor 5x439=2195 lesz a kezdőcím. Ezt a programban valahol ki kell számolni. Ha ez megvan akkor már tölthető az index regiszterbe és akár be is olvasható a memóriába. De a tömb index kiszámításához itt az ALU-t használtuk és nem a BIU-t. (ismét orbitális hazugság már számolhatatlanul sokadik).
Mindenesetre találtam egy videót:
https://www.youtube.com/watch?v=yOyaJXpAYZQ
Hátha valakinek jól jön. :) Köszi a válaszokat mégegyszer.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!