Zbirni jezik
Ta članek vsebuje podatke, ki so morda napačni. |
Zbirni jezik (angleško assembly language, iz assemble sestavljati) je nizkonivojski programski jezik druge generacije (2GL) – prve generacije (1GL) je strojna koda – ki je napisan s pomniki. Splošno velja, da ti pomniki predstavljajo berljive enačice dvojiških zaporedij (ničle in enice), ki jih je treba sestaviti, da dobimo za osrednje preračunalo razumljive ukaze. Natančno gledano, pomniki predstavljajo ukazne nize (angl. operation codes, skrajšano opcodes), ki so v osrednjem preračunalu sestavljeni iz ISA (ang. Instruction Set Architecture, sestava ukaznih nizov). Te ukaze pa je nato navadno treba povezati z določeno skladnjo, da dobimo delujoč in izvršljiv program. Določene programske opreme zbirnikov, kakor je za zgled FASM, samo zamenjajo pomnike in spremenljivke z ustreznimi ukazi v strojnem programskem jeziku. Tako se dobi ploske izvršilne datoteke, ki vsebujejo (sicer odvisno od izkušenj posameznega računalniškega ukazopisca) strojne ukazne nize z izjemno postopkovno uspešnostjo.
Zbirni jezik predstavlja najboljši približek dobesednemu prevodu navodil, ki jih računalnik izvaja, v človeku razumljivo obliko. Reklo bi se lahko tudi, da je zbirni jezik oče vseh drugih programskih jezikov, saj se vsi jeziki, ki uporabljajo prevajalnik, prevajajo v zbirni jezik (vendar pa večina prevajalnikov teh jezikov ukaze samodejno po koncu prevajanja še sestavi in poveže).
Kot nizkonivojski programski jezik, je jezikoslovje sestavljalnika vezano na specifičen tip računalnika. Na primer jezikoslovje zbirnika za Intelove procesorje (na kratko »x86 zbirnik«) izdeluje programe, ki lahko tečejo samo na Intelovih in vseh Intelovim skladnih procesorjih, vendar pa je ob tem vredno pomniti da to velja tudi za vso že prevedeno kodo višjenivojskih jezikov.
Dandanes ima velika večina računalnikov medsebojno skladno strojno opremo, ampak medsebojno neskladno programsko opremo. V taki situaciji ima zbirni jezik v prenosljivosti prednost pred višjenivojski, saj ni nujno vezana na programsko opremo.
Zaradi svoje neposrednosti ima zbirni jezik lahko tudi druge prednost, saj lahko programer v zbirniku naredi vse kar je izvedljivo v vseh višjenivojskih programskih jezikih skupaj. Iz podobnih razlogov je možno vsak obstoječi sestavljen program razstaviti nazaj v zbirno obliko.
Jezikoslovje zbirnega programskega jezika
[uredi | uredi kodo]Jezikoslovje tega jezika temelji na strojni kodi v katero se ta le-ta neposredno sestavlja. V določenih primerih je strojna koda v predstavitvi kot človeku razumljivo besedilo poenostavljena, zato da je delovanje jezika bolj intuitivno.
Način delovanja procesorja se odraža v jeziku nekako takole:
- Premikanje podatkov (MOV)
- iz spomina v procesor
- med deli procesorja
- iz procesorja v druge naprave
- Delo s podatki
- računske operacije (ADD kot , SUB kot -, itd)
- logične operacije (AND kot logični in, OR kot logični ali, itd)
- primerjave (CMP, TEST, itd)
- Spreminjanje poteka programa
- Skok na drugo mesto v programu (JMP)
- Skok na drugo mesto v programu pod pogojem (JE, JNE, JA, itd)
Poleg teh osnovnih mnemonov pa različni procesorji vsebujejo stotine specializiranih mnemonov, ki delujejo kot bližnjice v pri bolj zapletenih problemih. Z podrobnejše informacije o le-teh je navadno na voljo dokumentacija procesorja.
Pri zbirnem jeziku ni vsiljenih pomnilniških struktur, posledično pa tudi ne spremenljivk ali podprogramov. Vso naslavljanje (kje se iščejo podatki in kje se naj nadaljuje program pri skokih) se zato opravlja samo na podlagi razdalje od izhodiščne točke, ki se nahaja na začetku programa, termin za to pa je »odmik«. Ta odmik se v programski kodi piše skrajno levo, podbno kot oštevilčevanje pri programskem jeziku BASIC. Podobno kot pri BASICu, je tudi pri zbirnem jeziku obvezno označevanje opuščeno in lahko se uporablja kose besedila, ki jih zbirnik potem sam zamenja z primernimi številčnimi odmiki.
Primer programa v zbirniku
[uredi | uredi kodo]Tole je primer »živijo svet« programa v Ploščatem Zbirniku (FASM):
format PE GUI 4.0 include 'win32ax.inc' .code invoke MessageBox,HWND_DESKTOP,"Zivijo svet!«,"Program Zivijo Svet«,MB_OK invoke ExitProcess,0
Soroden primer programske opreme »živijo svet«, v ELF zapisu, brez pred definiranih makroinstrukcij mnemonikov:
format ELF executable entry Zacni segment readable executable Zacni: MOV EAX,4 MOV EBX,1 MOV ECX,SPOROCILO MOV EDX,VELIKOST INT 0x80 MOV EAX,1 XOR EBX,EBX INT 0x80 segment readable writeable SPOROCILO DB 'Zivijo svet!',0xA VELIKOST = $-SPOROCILO
Tule pa je primer DLLja napisanega v Ploščatem Zbirniku (FASM):
format PE GUI 4.0 DLL entry DllEntryPoint include 'win32axp.inc' section '.code' code executable readable proc DllEntryPoint hinstDLL,fdwReason,lpvReserved mov eax,TRUE ret endp proc Encrypt dataBuffer,dataLenght mov esi,[dataBuffer] mov ebx,esi add ebx,[dataLenght] dec ebx mov edx, 'PASS' ecryptZanka: mov eax, dword [esi] xor eax, edx mov dword [esi],eax add esi,4 cmp esi,ebx jna ecryptZanka ret endp section '.edata' export data readable export 'CRYPTODLL.DLL',\ Encrypt, 'Encrypt'
Ko se neki program enkrat sestavi, ga lahko v obratnem postopku spet razstavimo. Tule je primer tega kar dobimo iz programa za razstavljanje:
:004012A2 0500466F72 add eax, 726F4600 :004012A7 6D insd :004012A8 3100 xor dword ptr [eax], eax :004012AA 0D010D0041 or eax, 41000D01 :004012AF 7070 jo 00401321 :004012B1 204368 and byte ptr [ebx 68], al :004012B4 61 popad :004012B5 6C insb :004012B6 6C insb :004012B7 65 BYTE 065h
Pri čemer prvi stolpec kaže odmik, drugi stolpec heksadecimalno predstavitev nerazstavljene kode, zadnji pa razstavljene mnemone z parametri.
Glej tudi
[uredi | uredi kodo]Zunanje povezave
[uredi | uredi kodo]- Uvod v programiranje v zbirnem jeziku Arhivirano 2012-01-13 na Wayback Machine.
- ProgrammersHeaven[mrtva povezava] - Stran z primeri in vodiči kako pisati programe v zbirniku
- FlatAssembler.Net - Spletna stran Ploščatega Zbirnika