Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...

De unde cumparati suspensii / gar...
 [UNDE] Reconditionare obiecte lemn

Infiltratii casa noua

sugestie usa interior

ANAF si plata la selfpay
 Imprimanta ciss rezista perioade ...

Garmin fēnix 7 / PRO / Saphi...

Care sunt cele mai mari regrete a...

Alfa Romeo Stelvio 2.2 jtd
 Intrebari srl nou

La multi ani @AndReW99!

Alegere masina £15000 uk

TVR vrea sa lanseze o platforma d...
 

ASM, Limbaj de asamblare (low-level).

- - - - -
  • Please log in to reply
19 replies to this topic

#1
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Am si eu o intrebare despre limbajul asta. Unde mai exact se foloseste? In a dezvolta ce?
Sau are ca scop doar intelegerea mai buna a felului in care functioneaza procesorul si ce se intampla in spatele unui program sau atunci cand programam?

Edited by g0dafk, 09 November 2018 - 20:11.


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,438
  • Înscris: 10.08.2005
fiind low-level pe baza sa se dezvolata limbajele de programare

#3
mihaicozac

mihaicozac

    Guru Member

  • Grup: Senior Members
  • Posts: 15,595
  • Înscris: 05.12.2005
Controllerele industriale se pot programa şi în Assembler, mai ales dacă e vorba de aplicaţii mai simple, însă contează tipul de procesor folosit, respectiv nr. de regiştri, setul de instrucţiuni, etc. De obicei e vorba de operaţii simple aritmetice sau mutări de date.

#4
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,453
  • Înscris: 06.01.2010
Da, in cazurile in care vrei sa optimizezi la sange.

Despre compilatoare, aici: https://en.wikipedia...ping_(compilers)

#5
george_alexandru

george_alexandru

    Mwe Austria

  • Grup: Senior Members
  • Posts: 32,502
  • Înscris: 30.08.2017
Se foloseste in industrie unde e nevoie de softuri simple si stabilie pentru functionarea robotilor.

#6
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,438
  • Înscris: 10.08.2005
robotii parca aveau un BASIC?

#7
PopaXXX

PopaXXX

    Senior Member

  • Grup: Senior Members
  • Posts: 3,368
  • Înscris: 03.05.2018

View Postg0dafk, on 09 noiembrie 2018 - 20:07, said:

Am si eu o intrebare despre limbajul asta. Unde mai exact se foloseste? In a dezvolta ce?
In general software-uri care lucreaza direct cu hardware-ul gen sisteme de operare, drivere, limbaje de programare, pe vremuri se folosea mult si la aplicatii care trebuiau sa ruleze cat mai rapid si unde fiecare pic de performanta conta: jocuri, software-uri de editare foto, audio, video.
Se mai foloseste de asemenea pentru creat virusi sau de catre hackeri/crackeri in spart protectia programelor: fisierele executabile sunt dezasamblate, se obtine un cod sursa din ele in asamblare, care este apoi modificat, sau se elimina anumite instructiuni.

Edited by PopaXXX, 09 November 2018 - 20:36.


#8
_-AppleS-_

_-AppleS-_

    ✮✮✮✮✮✮✮✮

  • Grup: Senior Members
  • Posts: 4,512
  • Înscris: 09.07.2014
Pai unde sa se foloseasca, la crackuri.

#9
vrajitoruldinoz

vrajitoruldinoz

    Guru Member

  • Grup: Senior Members
  • Posts: 32,672
  • Înscris: 21.06.2016
Nu se foloseste in nici o industrie, peste tot exista emulatoae care trasleaza un limbaj de nivel inalt in limbaj de asamblare. In ziua de azi nu mai exista sofware "simplu".
Se folosesteevident daca faci un compilator, putini oameni fac asa ceva.

In princpiu are scop didactic in primul rind. E ca si cum ai ai vrea sa inveti matematica fara sa stii cum se face o inmultire cu numere mari. Cind a facut cineva o inmultire cu numere de 2-3 cifre, ce sa mi zic de mai mult de atit? Cu toate astea se invata la ciclul primar, se exerseaza o multime de timp. E un motiv pentru asta.

PS: a da, si la virusi, chestii de securitate etc.

#10
gabyxm

gabyxm

    Senior Member

  • Grup: Senior Members
  • Posts: 8,214
  • Înscris: 08.06.2004

View Postg0dafk, on 09 noiembrie 2018 - 20:07, said:

Am si eu o intrebare despre limbajul asta. Unde mai exact se foloseste? In a dezvolta ce?
Sau are ca scop doar intelegerea mai buna a felului in care functioneaza procesorul si ce se intampla in spatele unui program sau atunci cand programam?

Io, de exemplu, il mai folosesc ocazional pe microcontrollere dar doar in anumite portiuni ale unei functii/proceduri care vreau neaparat sa ruleze pe intervale de timp fixe. De exemplu vreau sa emulez o transmisie/decodare de date de tip Manchester code cu un header mai special pe un microcontroller pe care nu am suport hardware pentru asta si vreau sa fiu sigur ca fiecare bit transmis dureaza un timp fix.
In rest nu prea vad nici un motiv/avantaj sa folosesti asm.

Ultima data cand am folosit asamblarea pe x86 era acum vreo 10 ani si prima data: traiasca Z80! :Posted Image

Edited by gabyxm, 09 November 2018 - 21:14.


#11
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003
Procesorul executa anumite "coduri", iar ASM e cel mai apropiat de aceasta interfata expusa catre programator. Bine, el stie cod masina dar ca sa nu scrii BE 91 CD 00 FF AE, i s-a asociat la comenzile in cauza niste cuvinte ce au un sens pe limba omului (MOVE, JMP, CMP etc). Iar compilatoarele curente doar traduc din limbajele de nivel inalt la povestile astea masina/asm.
Intel (ca sa iau un exemplu) documenteaza ce face procesorul sau in asa ceva: https://software.int...icles/intel-sdm
iar tu, programator, faci ce vrei prin instrumentele tale dar sa ajunga la CPU asa ceva.

Edited by neagu_laurentiu, 09 November 2018 - 21:21.


#12
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,257
  • Înscris: 06.01.2007

View Postg0dafk, on 09 noiembrie 2018 - 20:07, said:

Am si eu o intrebare despre limbajul asta. Unde mai exact se foloseste? In a dezvolta ce?
Sau are ca scop doar intelegerea mai buna a felului in care functioneaza procesorul si ce se intampla in spatele unui program sau atunci cand programam?
Particularitatea acestui limbaj e ca, exista o corespondenta biunivoca intre ceea ce scrii si ceea ce vede procesorul.

In sensul ca .. tu scrii
MOV AX, BX;
si assemblerul nu face altceva decat sa interpreteze direct, biunivoc chestia aia intr-un sir de biti, spre exemplu
010010001000101010
unde de fapt subsirul cu rosu de biti e opcode-ul lui MOV, cel cu verde inseamna codul lui AX, ce-i cu albastru insamna registrul BX.
( codurile le-am pus eu la intamplare. Insa ele sunt bine definite in datasheetul procesorului sau in setul de instructiuni pe care-l imlrementeaza)


Teoretic ai putea scrie tu direct sirul de biti dar asta inseamna ca trebuie sa retii exact ce inseamna 01001000. Asemblerul nu fae altceva decat te ajuta sa poti scrie sirul de biti intr-un mod mai usor de retinut de catre programator. Practic assemblerul nu face nimic.

Acel sir de biti este incarcat direct in registrul de instructiuni al procesorului. Acesta e conectat electric la o retea de circuite care prin design e facuta ca sa copie continutul registrului AX in BX, in mod automatizat, ghidat de un ticăit de ceas. Mai face niste chestii tot asa, automat (incarca urmatoare instructiune), dar nu e relevant pentru intelegerea principiului. Daca vrei exact sa stii cum, iei o carte despre arhitectura procesoarelor si incepi sa inveti. Exista carti mai vechi despre procesorul Z80 in care gasesti explicatiile necesare constructiei unui procesor Z80 la nivel de tranzistor (poarta logica).

Ideea de baza e ca acel sir de biti reprezinta de fapt o comanda pentru procesor.
Si asemblerul face ca aceasta comanda sa n-o scrii tu ca un sir de biti, ar fi extrem de greu sa retii fiecare cod, e mult mai usor sa retii instructiunile in format text si registrii procesorului... etc.


Acuma...
Fiecare procesor are setul lui de instructiuni. In cazul celor din computerul tau, ele sunt compatibile cu procesoarele mai vechi, dar pot aparea noi seturi de instructiuni la procesoarele mai noi.
Arhiteetura s-a complicat mult de la Z80 sau 8086 din dorinta de a optimiza chestii hardware/software. S-a ajuns la un set maricel de instructiuni. Asamblorulare cunostinta despre acestea, daca e selectata platforma corespunzatoare.

Exista si alte procesoare, nu numai cele din caclulatorul tau. Procesoare de tableta/smartfon, procesoare industriale, etc..
Ele au cu totul alt set de instructiuni, ele se gasesc in fisa lui tehnica. Si vin si cu asambloare. Sau cu compilatoare. Sau.. sunt compatibile cu o arhitectura deja cunoscuta.


De mentionat ca asamblorul mai face si unele chestii pe care tu nu le poti face translatand ca papagalul codul asembler in sir de biti. Pentru procesoarele care detin segmente de cod, date, etc.. asambloarele fac o organizare a segmentului (de date, cod... eventual alte segmente). Alte procesoare lucreaza altfel, cu indecsi, nu cu segmente.. In spate se afla tot segmente de memorie. Asamblorul lucreaza cu niste sabloane/modele de programe pentru acel procesor, adicatelea isi organizeaza segmentul dupa ghidul producatorului. Pot fi segmente de memorie speciale care lucreaza cu periferice sau alte circuite auxiliare conectate la magistralele interne.
Meniul posibilitatilor s-a diversificat. Dar daca vrei sa stii, cauta sa inveti un procesor ca Z80 la nivel hardware. Si 8086 la nivel software(pentru ca poti testa mai usor).


Pentru a intelege la ce-i bun asemblerul, trebuie inteles ce-i compilatorul.

Compilatorul de limbaj C, de exemplu, dupa analiza regulilor gramaticale de sintaxa, proprie limbajului, arborele de tokenuri identificate in program va genera o succesiune de instructiuni in asamblare care apoi va trece printr-un proces de optimizare, eliminandu-se o buna parte dintre instructiuni.
Astfel creeaza o corespondenta intre codul scris si codul masina rezultat. Insa aceasta corespondenta nu e biunivoca, adica codul generat nu mai poate genera cod scris decat in anumite situatii (procesul de decompilare nu e success-proof 100%).
Avantajele compilatoarelor sunt destule, unul ar fi ca compilatorul poate verifica logica programului pana la un anime punct, asta te ajuta sa nu gresesti. Pe un compilator se pot atasa diverse alte toolsuri aditionale. Ele vin cu biblioteci de functii standard.
Sunt si astea de mai multe feluri. Unele de nivel jos, altele de nivel mai inalt, unele mai destepte care accepta atat low level cat si paradigme sofisticate de programare, bine teoretizate.


Acuma... in esenta, codul generat e de tip assembler. El e generat dinamic de catre compilatoare sau compilatoare in timp real(interpretoare) pentru a putea fi executat.
Deci... parti componente din aceste masinarii, trebuie facute in asamblare, sau avand in minte limbajul de asamblare.


La fel, pentru un procesor de masina de spalat, cel mai usor e sa-l progeamezi in asamblare. Se poate si in C, majoritatea au compilere de C.
Dar pentru un procesor super-simplu, de regula vei fi nevoit sa-i generezi codul dupa care va functiona direct in limbajul lui de asamblare. Mai low level de atat e sa scrii direct in cod obiect, dar nu se justifica, asamblorul fiind un tool extrem de simplu si beneficiile sunt foarte mari, nu scrie nimeni direct codul obiect in 0 si 1, ar gresi 100%.

Cam asta ar fi in mare filozofia. Dar pentru a cunoaste mai in detaliu, trebuie sa ai notiuni de arhitectura procesoarelor. Sa vezi ce-i ala un registru, un multiplexor-demultiplexor, un latch, un circuit care face adunari, inmultiri, scaderi, shiftari de biti... pentru ca unitatea aritmetica si logica din asa ceva e facuta. El interpreteaza OPCODE-le alegand circuitul cuvenit operatiei codificate de OPCODE, selectand registrii cuveniti sau accesand memoria prin secventa cuvenita (acces prin magistrala de date) E un circuit electric(logic) care face asta, ar trebui sa ai niste notiuni de circiuite logice sa intelegi exact cum se realizeaza miracolul.

Sper ca nu te-am plictisit, Succes la studiu!
Posted Image

Edited by maccip, 09 November 2018 - 21:33.


#13
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,235
  • Înscris: 24.02.2007
Procesoarele moderne sunt mai destepte decat par la prima vedere. De exemplu, in loc sa adune doi intregi, pot sa adune 8 perechi de intregi in acelasi timp.

Cand folosesti doar limbaje obisnuite, sunt mari sanse nici sa auzi de asta. In cel mai fericit caz poate folosesti un compilator care genereaza astfel de instructiuni.

#14
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,257
  • Înscris: 06.01.2007
Aia da, dar ca sa intelegi principiul de functionare la nivel hardware, tre sa incepi cu un procesor vechi, simplu, cu putini "tranzistori".

Nu ne putem astepta ca un model nou de procesor, oricat de simplu ar parea, sa fie gandit avand in vedere numarul mic de tranzistori.
Ele inglobeaza paradigme mai complcate, tot asa, pentru a reduce costurile, nu pentru a-l face mai simplu de inteles/programat.
Din punctul asta de vedere e mai greu de inteles, trebuiesc arse niste etape mai intai. Dar daca intelegi ideea, de multe ori e suficient pentru a te debloca in intelegere, nu mai e nevoie sa mergi mai departe cu detalii de optimizare. Desigur, cu exceptia cazului in care vre sa proiectezi tu un procesor. :D

#15
edy_wheazel

edy_wheazel

    Superior Member

  • Grup: Senior Members
  • Posts: 51,023
  • Înscris: 31.07.2007

View Postgabyxm, on 09 noiembrie 2018 - 21:13, said:

Io, de exemplu, il mai folosesc ocazional pe microcontrollere dar doar in anumite portiuni ale unei functii/proceduri care vreau neaparat sa ruleze pe intervale de timp fixe.

La incaput era singuru' limbaj pe care-l foloseam, era foarte folositor pentru a intelege arhitectura uC-ului. Nu-l mai folosesc deloc, desi uneori imi vine sa scriu portiuni de cod in asamblare cand lucrez cu registrii. :D

#16
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,257
  • Înscris: 06.01.2007
Cartea asta m-a facut sa inteleg exact cum anume functioneaza un procesor, ce-i ala limbaj de asamblare, care-i arhitectura unui calculator.
Aveam ceva notiuni de circuite digitale, ma jucam cu MMC-urile din seria 4000, singurele care se gaseau pe vremea aia prin magazinele de electronica.
Insa nu cred ca e nevoie, volumul 1 al cartii explica si portile logice.

Mi-aduc aminte ca era o carte bine scrisa, asa cum sunt multe carti romanesti de pe vremea aia.

#17
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,284
  • Înscris: 08.10.2015

View Postg0dafk, on 09 noiembrie 2018 - 20:07, said:

Am si eu o intrebare despre limbajul asta. Unde mai exact se foloseste? In a dezvolta ce?
Sau are ca scop doar intelegerea mai buna a felului in care functioneaza procesorul si ce se intampla in spatele unui program sau atunci cand programam?

Reverse engineering, antivirusi, cred ca si in robotica cand trimiti instructiuni directe pe porturi, etc. Executia codului este foarte rapida.

Edited by bumpocbum, 10 November 2018 - 13:28.


#18
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Foarte rar chiar ai nevoie sa programezi intr-un limbaj de asamblare.
Mult mai des ai nevoie de limbajul de asamblare pentru a intelege ce se intampla intr-un program C sau C++. L-am folosit si ca instrument didactic, pentru a explica diverse unor colegi - simplifica enorm lucrurile ;)

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate