Csao. Nehany napja elkezdtem assemblyt tanulni ebbol a konyvbol: http://download.savannah.gnu.org/releases/pgubook/
Lenne nehany kerdesem, ami itt nincs leirva. (vagy csak en voltam tul feluletes es nem talaltam) Az alabbi kod lefordul gnu assemblerrel, de nem fordul netwide assemblerrel (minden sor error).
#PURPOSE: Simple program that exits and returns a
# status code back to the Linux kernel
#
#INPUT: none
#
#OUTPUT: returns a status code. This can be viewed
# by typing
#
# echo $?
#
# after running the program
#
#VARIABLES:
# %eax holds the system call number
# %ebx holds the return status
#
.section .data
.section .text
.globl _start
_start:
movl $1, %eax # this is the linux kernel command
# number (system call) for exiting
# a program
movl $0, %ebx # this is the status number we will
# return to the operating system.
# Change this around and it will
# return different things to
# echo $?
int $0x80 # this wakes up the kernel to run
# the exit command
Mi lehet a problema? Azt olvastam, hogy minden assemblernek kulon "nyelvjarasa" van, de azt nem tudtam hogy ennyire... :)
Hol talalhatnek informaciokat (kezdonek szolot!) arrol, hogy "hogyan is mukodik a cpu meg a memoria? Sajnos eddig, csak robosztus leirasokat talaltam.
gnu assemblert ajanlja valaki, vagy nem? (azt irtak nasm oldalan, hogy kisse buta es csunya a szintaxisa)
- 6406 megtekintés
Hozzászólások
"kisse buta es csunya a szintaxisa"
Moziba akarod vinni, vagy fordítani akarsz vele?
A CPU kérdésed alapján te sem vagy még Einstein, nyugodtan használjad. Ne ez tartson vissza a tanulástól.
- A hozzászóláshoz be kell jelentkezni
A nasm intel szintaxist vár, a gnu assembler meg AT&T szintaxist, ezért is nem fordult le a nasm-ben a progi. Bővebben lásd a linuxassembly.org oldalt.
- A hozzászóláshoz be kell jelentkezni
Koszi. :)
- A hozzászóláshoz be kell jelentkezni
A NASM-ot egyébként egyszerű szintaxisa miatt csak ajánlani tudom, a doksija is nagyon jó, az x86 cpuk utasításkészletének a leírása is benne van, jól használható, én nagyon szerettem. Gyors, kényelmes, 2002-ben a legjobb volt. (gondolom, ma is az)
A fenti nasm-ul:
global _start
_start:
mov eax,1
mov ebx,0
int 0x80
Az első két sor a linkernek kell.
Majd
$ nasm -f elf valami.asm
Végül
$ ld -s -o valami valami.o
- A hozzászóláshoz be kell jelentkezni
Meg most is jo.
De ha valkinek amd64 -e van jobban jar, yasm -el, ami nasm syntaxist eszik. (Abba irtam a mest. int. hazikat :) )
- A hozzászóláshoz be kell jelentkezni
Mi a véleményetek a HLA-ról. (Abszolút dilettáns vagyok még az assembly-hez most találtam ki kb 1 hete) hogy magtanulok assembly-ül.
- A hozzászóláshoz be kell jelentkezni
Nekem abszolult nem tetszik. De masok azt mondjak C hez szokott embernek asmel ismerkedni kenyelmesebb.
De ez igy nem igazi asm. erzes :) nasm|yasm,gas -t probalj inkabb.
- A hozzászóláshoz be kell jelentkezni
Ok köszi.
- A hozzászóláshoz be kell jelentkezni
Most par dolgot leirok neked de ez nem a teljes igazsaga meoriakezelesrol sok dolgot elhalgatok rola de kezdetnek hogy megesd eleg lesz
Memóriakezelés
A számítógépben az adatok tárolására „két lehetőség” van vagy a háttértáron HDD, FDD (wincseszter, floppylemez) vagy a memóriában van rá lehetőség. A memóriában csak ideiglenesen tárolhatok mert kikapcsolás után az adatok elvesznek.
A memóriát valójában úgy kell el képzelni mint egy hatalmas nagy polcot sorba vannak a könyvek vagyis sorfolyamatos. Egy egysége „könyve” 1 byte vagyis 8 bit, aminek tárolókapacitása 2^8 ami 0-255 tárolhat számokat.
Mint ahogy mondtam a memória sorfolyamatos és ebből kifolyólag az eleme megcímezhetőek, de hogy ?
A kezdet kezdetén amikor a XT megjelent, akkor a mérnökök nem gondolták hogy valaha is nagyobb kapacitás kell vagy lesz egy számítógépnek mint 1Mbyte(1.073.741.824 byte).
Meg a címbuszok is 16 bitesek volta. Amin ugye látszólag nem lehet megcímezni 1M 2^16 ugyan is csak 65535. Ezért a mérnökök a vetkezőt találták ki.
Valós mód (Real Mode)
Legyen 2 darab 16bites regiszter amin a címzéshez szolgál.
Ezeket elnevezték DS (Data Segmens) illetve DI (Data Index)-nek. De hát ez mar sok lenne címezni mert 2^32 már olyan nagy szám hogy ezzel akár 4Gbyte ram-ot is meg lehetne címezni.
Ezért a DS egy szegmens vagy más néven lap lett. A DI pedig index ami 0-65535-ig (64Kbyte) megcímzését tette lehetővé.
A DS pedig arra szolgál hogy kiválasszuk a mi ki lapunkat.
A következő képen 1M megcímzéséhez 20 bitre lenne szükség de nekünk csak 16 van. Ezt a 20bitet úgy érik el hogy a DS regiszter 16bitje után utánnaírnak 4 darab 0-ez ugye nem más mint 16-al való szorzás.
Alacsonyabb szintű programozásinyelvekben ezt valahogy így írják le.
Move byte ptr [DS:DI],al
Nos ez a memóriacímzés a dos-ra vonatkozik bár a C vizsgátokat ebből kell tenni azért én leírom a másik fajta memóriacímzét is.
Védet mód.(Protected Mode)
Ez a memóriacímzés a 386 óta ismert. A létrejötte a egyre nagyobb memóriaigénynek köszönhető. Igaz mos sokakban femerült a kérdés már a 286-os is tudott 1M felett címezni? Nos igen valóban tudott de az úgy működött, hogy a alsó 1M-ba másolta a többi memóriát egy úgynevezett A20 vezérlőn keresztül ezekre voltak használhatok a XMS és a EMS vezérlőprogramok amiket a DOS tartalmazott. 386-osnál is használták egy ideig ezt a technikát de ha már nagyon sok memóriát kell bemásolni már elég sokat kell hozzá programozni sok gépidőt is levesz és ráadásul nehéz nyomonkövetni, hogy hova mit is tettünk.
Nos jöjjön a nagy áttörés. Veszünk egy kis darabot az alsó 1M memoriábol oda letárulunk egy úgynevezett GDT táblát, Ezekben a táblákban különböző információkat tárolunk PL irható/olvashato ?
Meg még egy nagyon fontos információt egy 32bites számot is tárulunk ami majd a megadott memóriacímet fogja tárolni. A védett módban ezen a 32bites memórirekeszen keresztül megy a címzés.
Vagyis ahova ez a 32bites cím mutat oda tudunk írni vagy olvasni.
Igy meg tudunk címezni 4G memóriát.(2^32)
Egy kis összehasonlítás.
Valós mód Védett mód
1M alatt gyorsabb Lassabb
1M folott Lassab Gyorsabb
proramfutas Gyorsabb Lassabb
- A hozzászóláshoz be kell jelentkezni
Bocs, csak egy kis kiiagzitas:
a 286-os is tudott 1M felett címezni? Nos igen valóban tudott de az úgy működött, hogy a alsó 1M-ba másolta a többi memóriát egy úgynevezett A20 vezérlőn keresztül
Ezt igy ahogy van felejtsd el. A protected mod a x286-osoknal indult, csak nem 32-bites, hanem 24-bites (16MB) cimzest hasznalt. Az egyik leglenyegesebb kulombseg az volt, hogy nem lehetett visszavaltani processzor szinten real mode-ra, csak processzor reset-tel. Az A20 meg egy kisse mas tortenet, ez arrol szol, hogy az 8086/8088-nak nem volt A20-as cimlaba, nehany program, viszont hasznalta, mivel a proci szempontjabol olyan volt mintha ujra az also 64K-ban matattak volna... Szoval ezt a trukkot lehetett emulalni az A20 Gate-el, ami a keyboard controller resze volt (lett :-)...
Az XMS/EMS meg megint egy masik teszta es nem processzorhoz kotodik, hanem a DOS-hoz, iletve a Real/Protected modhoz...
Zsiraf
p.s.: RTFW (pl.: http://en.wikipedia.org/wiki/80x86#16-bit_protected_mode)
- A hozzászóláshoz be kell jelentkezni
Valoban nem feltetlen procesorfuggo de hat ugy he nincs hozza regisztered akkro nincs:d a protected mod rendes megvalositasahoz 32 bites regiszerek kellenek azzal meg ugye nem feltetlen volt a 286 osnak. De minden esetre ez nem isz szamit valojaban az el a lenyeg. Az hogy biznyos allitasok nem pontosak nem szamit egy magyarazo leirasnal. A programozas nem tortenelm :D de ha te fontosnak tartod nyugottan kiegeszitheted.
- A hozzászóláshoz be kell jelentkezni
a protected mod rendes megvalositasahoz 32 bites regiszerek kellenek Ezt meg honnet veszed? Eleg jol mukodik a 286-os protected mode
Az hogy biznyos allitasok nem pontosak nem szamit egy magyarazo leirasnal. Telleg?
A programozas nem tortenelm akkor minek fejtegetted a tortenelmet? Ha mar valamit allitasz, akkor ne baromsagokat... Mert ezzel az erovel akar a Piroska es a farkast is idezhetted volna, vagy akar random karaktereket is. Az informacioerteke kb. ugyanaz.
Zsiraf
p.s.: ja ha megtanulnal olvasni...:-) a processzorfuggoseget az EMS/XMS allitasodra irtam, mival annak tul sok koze nincs a 286-oshoz, legfoljebb annyi, hogy azon mar mukodik.
p.s.: wiki://80286; wiki://protected_mode; stb, stb
- A hozzászóláshoz be kell jelentkezni
"Védet mód.(Protected Mode)
Ez a memóriacímzés a 386 óta ismert."
286osnak is volt már sokkal kezdetlegesebb védett módja...
"Nos igen valóban tudott de az úgy működött, hogy a alsó 1M-ba másolta a többi memóriát egy úgynevezett A20 vezérlőn keresztül ezekre voltak használhatok a XMS és a EMS vezérlőprogramok amiket a DOS tartalmazott."
a 286-os 16MB memóriát tudott fizikailag megcímezni. Nem csak DOS-os memóriakezelésből állt akkor sem a világ... tudott már virtuális memóriát pl.
"Nos jöjjön a nagy áttörés. Veszünk egy kis darabot az alsó 1M memoriábol oda letárulunk egy úgynevezett GDT táblát, Ezekben a táblákban különböző információkat tárolunk PL irható/olvashato ?"
hol olvastad hogy a GDT muszáj 1M alatt legyen?
meg még lehet folytatni...
- A hozzászóláshoz be kell jelentkezni
286osnak is volt már sokkal kezdetlegesebb védett módja... Hmm.. szerintem nem volt sokkal kezdetlegesebb. Majdnem ugyanannyit tudott a 386 is mint a 286, marmint a protected reszebol. Tulajdonkeppen csak paging, meg VM86-al nem rendelkezett a 286-os (meg persze protected->real atvaltasi lehetoseggel).
- A hozzászóláshoz be kell jelentkezni
"Legyen 2 darab 16bites regiszter amin a címzéshez szolgál.
Ezeket elnevezték DS (Data Segmens) illetve DI (Data Index)-nek."
DI az Destination Index :P... meg aztán mi az hogy 2 darab 16bites regiszter?
- A hozzászóláshoz be kell jelentkezni
"A kezdet kezdetén amikor a XT megjelent, akkor a mérnökök nem gondolták hogy valaha is nagyobb kapacitás kell vagy lesz egy számítógépnek mint 1Mbyte(1.073.741.824 byte)."
Uristen. Mit szivsz? Enis kerek! :) Komolyra forditva, "mint az kozismert", az IBM mernokei Motorola 68000-re akartak epiteni a PC-t, ami egy 32/16 bites hibrid processzor, 24 bites cimbusszal, szegmentalas nelkuli linearis cimtartomannyal. (pl. 32 bites cimregiszterek), valamint kepes volt privilegiumszinteket es kiveteleket kezelni. Ez a processzor egyebkent egy 1979-es konstrukcio, kvazi a 8086-al egykoru, es az assemblyjet en kotelezove tennem megtanulasra mindenkinek aki ilyen alacsony szintu dolgokra adja a fejet, mert akkor talan joval epeszubb szoftverek es architekturak szuletnenek.
Arrol nem is beszelve, hogy az XT korantsem a kezdetek kezdete volt, raadasul a 80-as evek vegeig gyakorlatilag minden epeszu architekturat Motorola 68000 es a csalad tobbi tagja hajtott, de ebbe most ne menjunk bele, mert sose bonyolodunk ki belole.
Szoval, vegul a koltsegek, es a 8086 kompatibilis processzorok alternativ beszerzesi lehetosegei (AMD) miatt dontott a management inkabb az Intel architektura mellett. Az IT-vilag azota sem heverte ki ezt a csapast, es felek mar nem is fogja...
De ilyen hulyeseget akkor sem irunk, hogy a mernokok nem gondoltak... Nem a fraszt. Az mas kerdes, hogy az Intel-dontes a sikhulye ostoba buta, fapad ganyolt architektura miatt egy olyan toldozunk-foldozunk kenyszerpalyara helyezte az egeszet, aminek maig sincs vege.
(Es a magaba tenyleges x86 architekturaval kapcsolatos hulyesegekbe mar belekotott mas, igy azt most melloznem.)
-=- Mire a programozó: "Na és szerintetek ki csinálta a káoszt?" -=-
- A hozzászóláshoz be kell jelentkezni
Az a baj hogy 1 dolgot elfelejtetek irtam hogy reszigasag.
2. a memoriakezeles op. fugo.
3. Ez 1 leegyszeruitett atomprimitiv leiras hogy az is megertse akinek halvany lila goze nincs az egeszrol
- A hozzászóláshoz be kell jelentkezni
"2. a memoriakezeles op. fugo."
itt eddig szvsz az architektúráról volt "szó", egyáltalán arról hogy mit támogat az x86os processzor...
"3. Ez 1 leegyszeruitett atomprimitiv leiras hogy az is megertse akinek halvany lila goze nincs az egeszrol"
biztos sértőnek tűnik, de ha ebből valaki meg akar érteni valamit, annak nincs könnyű dolga...
1. illik pontosnak lenni, ha már valamit leír az ember:
"Alacsonyabb szintű programozásinyelvekben ezt valahogy így írják le.
Move byte ptr [DS:DI],al"
move byte ptr ds:[di], al -> legalább ne vezessük félre a kezdőket...
2. illik következetesnek lenni:
"Nos ez a memóriacímzés a dos-ra vonatkozik"
miért, csak DOS volt a régi gépeken? Más valós módú "oprendszerekre" nem volt érvényes a 16*szegmens + offszet?
- A hozzászóláshoz be kell jelentkezni
Nos mutatnek 1 forraskodot Move byte ptr [DS:DI],al miatt
http://seriss.com/people/erco/vt100/video.asm.html
Termeszetesen ez is fordito fuggo mint minden szintaktika, enged kisseb nagyob eltereseket
De minden estre nem problema hogy montad te 1 informer tipusu ember vagy fotos szamodra az adat. Ez nagyon jo es kellenek ilyen emberek hisz az altalam es mineki altal irt programok tesztelesere kivalloan alkalmas vagy. Nagyon jol felfigyelsz az esetleges hibakra kellenek ilyen emberek. De aki programozni akar az mindekep nyugottan nyison meg valami helpet segitsegert nezzen meg mintakat es ne akarjon emlekezni mindere mert sajnos ebbol csak ehez hasonlo vitak lesznek. Valojaban a gyakorlat ugyis kiozza. Es barmenyire tetszik vagy nem en tudom hogy nincs igazam de azt is hogy masnak sem. Hisz annyi minden fugvenye lehet minden. De az alapel ez es ez a lenyeg. Az hogy milyen kornyezetbe valositod meg annak vanak kriteriumai. Azok utan utan kell nezni es kesz. Nem kell egyetlen konyvre sem hivatkozni es hinni neki.
Mert ha mindenki vakul hitt volna a konyvekben, tananyagban sajna nem lennek urhajoink.
- A hozzászóláshoz be kell jelentkezni
Viszont így egy egy hozzám hasonló laikus egy csomó plusz infot felszívhat, és még jól is szórakozik :-)
- A hozzászóláshoz be kell jelentkezni