Computer Games Forum
 

Go Back   Computer Games Forum > Tech > The Workshop > Limbaje de programare

Notices

Căutare produse PC Garage: Şterge căutarea

Reply
 
LinkBack Thread Tools
Old 22-08-2006, 15:39   #1 (permalink)
Registered User
 
Join Date: Aug 2006
Assembly n00b

Sal'!
De curand m-am apucat sa invat Assembly si parerea mea e ca e foarte greu . Am cumparat o carte de la Teora, ii zice "Programarea in Limbaj de asamblare" scrisa de Vasile Lungu si am cateva nelamuriri...
Orice element dintr-un segment din memorie este disponibil printr-o adresa logica segmentata care contine un selector (folosit ca un index pentru a selecta descriptorul corespunzator din tabela descriptorilor) si deplasamentul (offset-ul) care specifica adresa exacta a elementului selectat fata de offsetul 0. Ce face in fact aceasta adresa logica segmentat (adresa care, presupun ca estemapata peste memoria fizica) si ce este acel presupus element? Thanks.
 
uu666 is offline    Reply With Quote
Old 22-08-2006, 16:26   #2 (permalink)
Registered User
 
cloud's Avatar
 
Join Date: Oct 2003
Location: Bucuresti
inveti assembler...
 
cloud is offline    Reply With Quote
Old 08-09-2006, 18:46   #3 (permalink)
Registered User
 
James Wolf's Avatar
 
Join Date: Aug 2006
Problema este ca ai pus intrebarea la fel ca in carte dci nu am inteles mai nimic din trebare . Incearca sa folosesti termenii din egleza .
Elementul este de fapt si de drept o adresa de memorie sau mai bine zis o locatie fizica din memorie, adresa logica segmentata, traducere made by Vasilica Lupica (hate catile de la Teora), este adresa unei locatii de memorie de forma xxxxxx:yyyyyy unde sirul de x este adresa de start a blocului de memorie sau stiva de memorie a programului si sirul de y este offsetul adica cu cat se deplaseaza adresa de memorie spre dreapta pentru a afla adresa de memorie a informatiei cautate. In ASM se stie adresa de start a stivei adresa care din ce imi aduc aminte se poate afla deoarece la inceputul unui program in ASM se rezerva memorie z, fiecare dupa plac, gust, necesitati.

Nu sunt sigur dar parca aceiasi carte o am si eu numai ca in afara de cartea respectiva am aruncat ochii si pe diferite surse ASM de virusi si chiar una bucata soft facut in Pascal si imi scapa cuvantu' a fost dezasamblat .
__________________
James "Hitman" Wolf, Lieutenant JG
Armed Forces of the Federated Suns,
House Davion,
Davion Brigade of Guards, First Davion Guards,
New Avalon, NAIS College of Military Science
"For Victor, for Federated Suns"
 
James Wolf is offline    Reply With Quote
Old 08-09-2006, 21:49   #4 (permalink)
Registered User
 
Join Date: Nov 2001
ufff...assembler....
era o data ca niciodata, ca daca n-ar fi fost nu s-ar fi povestit, o chestie numita procesor (si avea registrii) si inca o chestie numita memorie. si procesorul accesa celule din memorie, pe baza adreselor lor.
ca sa fiu mai clar si sa nu ma apuc sa fac calcule, presupunem ca registrii erau pe 2 biti si memoria avea 4 celule. adica procesorul putea accesa celulele 00, 01, 10, 11, intrucat adresa de memorie era scrisa intr-un registru(care nu putea mai mult de 2 biti. asa era el, slab si prost, nu tinea minte mai mult).
timpul a trecut, memoria a crescut intr-un an cat procesorul in 3 si programatorii au descoperit ca au la dispozitie 16 celule de memorie, dar nu pot accesa decat 4(intruct registrii au ramas mici). asa ca s-au gandit ei sa acceseze memoria folosind 2 registrii. mai precis, au impartit cele 16 celule in 4 grupe de cate 4 celule, apoi au scris in primul registru numarul grupei si in al 2-lea registrul, adresa celulei din cadrul grupului. si asa celula a 3-a a fost accesata prin 00:10 (adica grupul 0, celula 3), iar celula a 5-a a fost accesata prin 01:00(grupul 1, prima celula) si celula a 12-a a fost accesata prin 10:11(grupul 3, celula 4).

Asa ca adresa fizica a unei celule de memorie definita prin xx:yy se calcula cam asa: xx * 4 + yy. 4 ala provine din nr de valori ce incap intr-un registru.


PS:unde am scris xx:yy, am scris in binar. deci 11:10 inseamna 3:2 in zecimal. si am mai aplicat notatia din C, adica primul indice e 0, nu 1. d'aia 00:10 inseamna grupul 0, a 3-a celula(primele 2 sunt 00, respectiv 01).
PS2:in realitate, procesoarele au fost pe 8, 16, 32 biti etc (cele pe 2 biti nu le-am prins )
__________________
Who forgot to close the gate? Who let me out?
 
Smiley is offline    Reply With Quote
Old 09-09-2006, 10:26   #5 (permalink)
Registered User
 
Dark's Avatar
 
Join Date: Nov 1999
Real mode (adica DOS):
Quote:
Originally Posted by Wikipedia
The x86 architecture uses a process known as segmentation to address memory, and not a linear method as used in other architectures. Segmentation involves decomposing a linear address into two parts - a segment and an offset. The segment address points to the beginning of a 64K group of addresses and an offset from the base address of the specified segment. In real mode, to translate back into a linear address, the segment address is shifted 4 bits left and then added to the offset. The formula looks like this: segment*0x10+offset.
http://en.wikipedia.org/wiki/X86_ass...dressing_model

Protected mode (adica orice OS din ultimii 10 ani):
Quote:
Originally Posted by Wikipedia
In protected mode, segmentation has a completely different meaning. Segmentation is a virtual memory scheme, like paging which although is supported on x86, is not supported on many other architectures. A logical address consists of a 16-bit segment selector and a 32-bit or 16-bit offset. The segment selector must be located in one of the segment registers: CS, DS, SS, ES, FS, GS. That selector consists of a 2-bit Requested Privilege Level (RPL, where the lowest number has the highest privilege), a 1-bit Table Indicator (TI), and a 13-bit index. The processor will index by the appropriate amount (times 8 since segment descriptors are 8 bytes) into the GDT (Global Descriptor Table) if TI=0, or the LDT (Local Descriptor Table) if TI=1.
http://en.wikipedia.org/wiki/Memory_segment ; http://en.wikipedia.org/wiki/Global_Descriptor_Table

Toate detaliile tehnice aici. Citeste de la sectiunea 3.4.2 la 3.4.5 (inclusiv). Daca nu intelegi, ia-ti alta carte despre ASM.
__________________
Scarbit de fapta ta cea rea
Degeaba plangi, acum, copile,
Ci du-te'n casa-acum si zi-le
Parintilor, isprava ta.
 
Dark is offline    Reply With Quote
Old 11-09-2006, 12:37   #6 (permalink)
Nick anterior: hcosmin
 
Helix's Avatar
 
Join Date: Nov 2001
Location: Bucuresti
E oarecum simplu.

Din punctul de vedere al programului tau, tu ai aces la niste portiuni de memorie liniare numite "segmente" de memorie. O portiune de exemplu va contine date de un anumit tip, alta codul programului, ar putea contine functii de sistem, etc..

Fiecare segment incepe cu adresa 0 si are o anumita lungime, numarul unui byte in segmentul respectiv se numeste offset. Poti incerca sa acesezi memorie peste lungimea segementului dar vei primi o eroare.

Deci pentru a accesa un byte din memorie, poti scrie/citii de la o adresa de forma x:y unde x e numarul segmentului ("selector" intr-un tabel unde se zic chestii de gen dimensiune, daca te lasa sistemul de operare sa scrii sau citesti in el, etc.. ), si y e numarul byte-ului in segment.

Fiecare program are propria sa structura de segmente, nu exista o corespondenta directa cu o zona din memoria fizica - un segment poate reprezenta un fisier de pe hardisk care va fi citit de sistemul de operare cand incerci sa accesezi date, sau poate reprezenta date din memoria video sau pentru un alt device.

Restul e gargara care tine de arhitectura calcualtorului si pe tine nu te intereseaza in mod normal.
__________________
Linux is free only if your time is worthless.
 
Helix is offline    Reply With Quote
Advertisment
Reply

  Computer Games Forum > Tech > The Workshop > Limbaje de programare

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT +2. The time now is 22:33.


Advertisement System V2.5 By   Branden
This site is copyrighted ©1997 - 2008, Computer Games Online SRL