Van manapság olyan ember, aki bináris nyelven tud/próbál programozni?
Gondolom a "bináris nyelven" azt érted, hogy közvetlenül a gépi kódot kellett bepötyögni.
Nem hiszem, hogy lenne ilyen, nincs szükség rá, minden processzorra létezik már legalább egy assembly cross-compiler.
Nem őrültek bele, mert nem hatalmas rendszereket programoztak így, aztán meg gyorsan elkészültek az első assembly compilerek.
Huszon valahány éve én is írtam így kisebb programokat Z80 rendszerekre. Papíron assembly mnemonikok, mellé írtam a cheat sheetből a gépi kódot. Aztán bepötyögtem a hexa billentyűzeten, ellenőriztem a led-es hétszegmenses kijelzőn és már futott is, ha szerencsém volt.
Azért nem őrültek bele, mert:
- nem is tudhatták, hogy milyen lenne anélkül
- sokkal kisebb programokat írtak
- amikor már túl nagyon kezdtek lenni a programok, kitalálták az assembly-t
Egyébként gondolj bele: hogy lehet, hogy 200 éve az emberek elektromosság nélkül éltek? Hogyhogy nem őrültek bele? Hát úgy, h. nem is tudták, h. létezik, és hogy mennyire megkönnyíti az életet, így nem is hiányzott nekik.
@scriba:
Hüm-hüm. Nem tudom, van-e értelme egyáltalán annak, hogy a "CPU a 0 és 1-et érti csak meg", mindenesetre én dilettánsként másképp válaszoltam, és bátortalanul, de ideírom, ha már annyit kínlódtam vele...
@Kérdező:
Sajnos, ez marhaság, valószínűleg az se értette, akitől tanultad. A 0 és 1 nem számok, hanem számjegyek, amelyekből csoportokat alkotva bármekkora számokat fel tudsz építeni, tehát akárhány utasítást és memóriacímet be tudsz sorszámozni velük.
Képzeld el ugyanezt tízes számrendszerben, mondjuk, házszámokkal. Értelmes-e az a megállapítás, hogy "a postás csak a 0,1,2,3,4,5,6,7,8 és 9-et érti, és minden ilyen szám egy helyet foglal el a borítékon"? Ennek az alapján minden utca legföljebb 10 házból állhatna. Ott a trükk, hogy a felsoroltak nem számértékek, hanem számjegyek, amelyeket csoportba foglalva akármekkora számokat kifejezhetsz velük. Ha a cím Rezeda utca 136., akkor az nem azt jelenti, hogy a postás először az első, aztán a harmadik, majd a hatodik házba viszi el ezt a levelet, hanem a számjegyeket a helyiértékük szerint értelmezve 100+30+6 összegének tekinti. A kettes számrendszerben csak két számjegy van, de ez nem jelenti, hogy csak kétféle értéket írhatsz le vele (például kétféle utasítást), mivel a helyiértéktől függően ugyanaz az egyes számjegy jelenthet 1,2,4,8,16,32,64,128,256, stb. (decimális) értéket, duplázással elméletileg tetszés szerint folytatva a sort. Ez csak az ábrázolás módjában tér el más számrendszerektől, de semmiféle korlátot nem jelent.
A végletekig egyszerűsített számábrázolási mód alkalmas a nyeretlen kétévesek kábítására: Lám, a számítógép csak két dolgot tud, egyet vagy nullát, és mégis mi mindenre nem képes! Ez azonban nem igaz abban a formában, hogy a CPU hol a nullát, hol az egyet értelmezi. A processzor eleve több ezer féle utasítás végrehajtására képes -- hogy ezek közül melyikre van szükség, azt onnan tudja, hogy nem egyenként húzkodja elő az 1 vagy 0 számjegyeket, hanem azok nagy számokat jelentő bitminták formájában egyszerre érkeznek hozzá. Erre valók azok a csinos szalagkábelek a gépen: A sok vezetéken egy időben kap különféle helyiértékű 1 és 0 jeleket, tehát az eredmény nem 1 vagy 0 lesz, hanem az ilyen számjegyekkel leírt, adott esetben sokkal nagyobb számérték.
Azon senki sem bámul, hogy a Háború és béke két jellel -- feketével és fehérrel -- leírható. Természetesnek vesszük, hogy ezek a színek bizonyos ábrákba vannak elrendezve a papíron, és ezáltal két dolognál többet jelenthetnek. A számítógép másképpen alkalmazza a maga kétféle információját, de ha a fizikai megvalósítástól eltekintesz, az elv nagyon hasonló. A jeleket nem magukban, hanem a belőlük összeállított mintázat szerint értelmezi.
Ha már a mintákról szó esett, érdemes tisztázni azt is, hogy az emlegetett 0 és 1 jeleknek semmi közük a képernyőn megjelenő "0" és "1" karakterekhez. Egyszerűen két eltérő akármi, amit értelmezhetsz igen/nem, igaz/hamis, üres/teli, semmi/valami jelentéssel, stb. Az, hogy ez a számítógépen hogyan jelenik meg (pl. két eltérő jelszint), az a dolog logikája szempontjából közömbös. A hagyományos 0 és 1 számjegyek helyett jelölhetnéd a kétféle értéket szívecskékkel és rózsaszálakkal vagy kopasznyakú és kendermagos csirkékkel is, attól még működne, és talán kevésbé zavarná össze a gondolkodásod.
A karakterábrázolás kapcsán itt küzdök még számrendszerekkel, talán ez is érdekes lehet a számodra:
Teljesen jól leírta a problémát az előttem szóló, én kiegészíteném egy példával.
Anno, jó régen még én is programoztam Commodore 64-en gépi kódban. (Jobb híján :)
Aztán pc-re térve már nem szivattam magam ilyenekkel, mert elvarázsoltak a magasszintű programnyelvek, de a logikája ott is ugyanaz, mint az alant leírtaknak :)
Az egyesek és nullák magukban valóban nem érnek semmit, a processzor is min. 8-as csoportokban értelmezi őket, mint parancsokat.
Ha teszem azt, ki akarok íratni egy A betűt a képernyőre, azt a fent említett 8bites 30 éves gépen a következőképpen tehetem meg:
(ez még nem gépi kód, hanem assembly példa)
LDX #1 - (Load X -> 1)
STX $0400 (Store X -> 0400-as mem. címre)
Az LDX bepakol egy értéket a processzor X regiszterébe. (Afféle "tárolók") Jelen esetben beleírunk egy 1-est, ami az A betű kódja.
Az STX kiírja az X regiszterben tárolt értéket a $0400-as memóriacímre, ami a képernyőmemória kezdete. Szóval a bal felső sarokban meg fog jelenni egy A betű :D
A fenti példa még nem "bináris", szépen szólva gépi kód, hanem assembly, aminek a lényege, hogy az ember fia könnyebben jegyez meg betűkból álló parancsokat, mint számokat. Így az utasításokat jelölő SZÁMOKAT rövid BETŰSZÓKKAL helyettesítjük, amit egy assembler programba bepötyögve, majd az lefordítja számokra.
A szám hozzárendelések:
LDX = 162, 1=1
STX = 142, 0400 = 00, 04
Tehát a memóriában tárolva így fog kinézni a program: 162, 1, 142, 0, 4
(Valójában binárisan tárolódik, a következőképp: 10100010, 00000001, 10001110, 00000000, 00000100)
Ezt a proci simán értelmezi és végrehajtja. Csak ezt az egy "nyelvet" érti. Ha vágod melyik szám mit takar, simán el lehet így programozgatni. Természetesen ez 20 évvel ezelőtt egy 64kbyte-os gépen még járható út volt, manapság sem idő, sem (agyi, emberi) kapacitás nincs arra, hogy mindent így csináljanak meg. Erre vannak a magasszintű programnyelvek. Pl basic, pascal, C, stb...
Beírod az utasításokat, aztán a fordító lefordítja azt egy jó bonyolult számsorrá, amit megért a proci...
Régen azért nem őrültek bele, mert akkoriban még simán átlátható volt akár egy ember számára is egy adott gép működése és felépítése. Például anno egy trabantot még mi is szétkaptunk, összeraktunk haverral. Egy mai kocsira, ami rottyig van pakolva elektronikával, meg csipekkel, rá se mernék nézni, mert azt sem tudom mi mit csinál :)
Szóval a technika bonyolultsága magával hozta azt, hogy a pici építőkövekről (gépi kód, assembly), áttértünk a nagyobb egységekre, kb mint a lakótelepi panelos építkezés, az agyagtégla öntögetés helyett.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!