Zbirni jezik
Iz Wikipedije, proste enciklopedije
Zbirni jezik (assembler) (angleško assemble - sestavljati) je nizkonivojski programski jezik, ki je napisan z mnemoniki. Mnemoniki predstavljajo berljive inačice dvojiških zaporedij (ničle in enice), ki jih je potrebno sestaviti, da dobimo centralnemu procesorju razumljivo kodo. To kodo je nato potrebno še povezati z določenimi strukturami, da dobimo delujoč izvedljiv program.
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 kodo 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.
Vsebina |
[uredi] Jezikoslovje zbirnega programskega jezika
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 z 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.
[uredi] Primer programa v zbirniku
Tole je primer "živijo svet" programa v Ploščatem Zbirniku (FASM):
format PE GUI 4.0 include 'win32ax.inc' .code invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!","Win32 Assembly",MB_OK invoke ExitProcess,0
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 nek 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.
[uredi] Glej tudi
[uredi] Zunanje povezave
- http://colos1.fri.uni-lj.si/~sis/COMPUTING/ASSEMBLER/index.html
- ProgrammersHeaven - Stran z primeri in vodiči kako pisati programe v zbirniku
- FlatAssembler.Net - Spletna stran Ploščatega Zbirnika