Asemblerio kalba
Šiam straipsniui ar jo daliai trūksta išnašų į patikimus šaltinius. Jūs galite padėti Vikipedijai pridėdami tinkamas išnašas su šaltiniais. |
Asemblerio kalba – žemo lygio programavimo kalba, skirta tam tikros architektūros kompiuterių mašininėms komandoms žymėti.
Pavyzdžiui, kompiuteris su atitinkamu procesoriumi, supras šią mašininę komandą:
10110000 01100001
Tačiau programuotojui bus lengviau suprasti šios mašininės komandos atitikmenį asemblerio kalba:
mov al, 061h
kuri reiškia procesoriaus komandą įkelti skaičių 61 (97 dešimtainėje sistemoje) į procesoriaus registrą al. Komanda „mov“ yra angliško žodžio „move“ (perkelti) santrumpa ir, kartu su kableliais atskirtais komandos parametrais, yra tipiška asemblerio kalba parašytos programos eilutė.
Asemblerio kalbos komandų vertimas į mašininę kalbą atliekamas asemblerio programa, ir atverčiamas atgal disasemblerio programa. Skirtingai nuo aukšto lygio kalbų, komanda, asemblerio programa paversta į mašininį kodą ir atstatyta atgal disasemblerio programa dažniausiai visiškai atitinka pirminį tos komandos variantą.
Kiekviena kompiuterio architektūra turi savo mašininį kodą ir savo asemblerio kalbą. Kompiuteriai skiriasi palaikomų operacijų skaičiumi ir tipais, jie gali skirtis procesorių registrų dydžiais ir skaičiumi, skirtingais apdorojamų duomenų tipais.
Įvairios skirtingos asemblerio kalbos komandos, turinčios tą pačią paskirtį, gali būti verčiamos į tokią pačią mašininę komandą. Tačiau dažniausiai naudojamos tos asemblerio kalbos komandos, kurios aprašytos gamintojo dokumentacijoje.
Įvairūs pavyzdžiai
[redaguoti | redaguoti vikitekstą]Skirtingai, nei daugumoje kitų programavimo kalbų, asembleriu parašytos programos priklauso nuo to, kokiam procesoriui, operacinei sistemai ar net asemblerio programos versijai jos skirtos.
i8086, DOS, Intel sintaksė
[redaguoti | redaguoti vikitekstą]; Programa "Sveikas pasauli", 8086 .COM vykdomasis formatas, Intel sintaksė ; Komentarai atskiriami kabliataškiu CSEG segment ; Segmento apibrėžimas ASSUME CS:CSEG, DS:CSEG, SS:CSEG, ES:CSEG ; Segmentinių registrų reikšmių apibrėžimas ORG 100h ; Įėjimo į programą taško adresas Start: JMP ProgCode ; Pereiname į kodo pradžią (peršokame per tekstą) OutString db 'Sveikas, pasauli!',13,10,'$' ; Eilutė teksto, skirta išvedimui į ekraną ProgCode: MOV AH, 9h ; Į registrą AH perkeliamas DOS teksto išvedimo f-jos kodas MOV DX, offset OutString ; Į registrą DX perkeliamas teksto eilutės adresas INT 21h ; Pertraukimas nr. 21h: DOS f-jų iškvietimas ; Rezultate išvedama teksto eilutė "Sveikas, pasauli!" ProgExit: INT 20h ; Pertraukimas nr. 20h: DOS programos užbaigimas CSEG ENDS ; Segmento pabaiga END Start ; Nurodomas įėjimo taškas
i386, UNIX (FreeBSD), AT&T sintaksė
[redaguoti | redaguoti vikitekstą]# Programa "Sveikas pasauli", x386 FreeBSD vykdomasis failas, AT&T sintaksė # Komentarai pradedami "#" ženklu. .data # Duomenų sekcija msg: .asciz "Sveikas, pasauli!\n" # Teksto eilutė spausdinimui len = . – msg – 1 # Teksto eilutės ilgis .text # Kodo sekcija .global _start _start: # Programos įėjimo taškas pushl $len # Argumentas nr.3: teksto eilutės ilgis pushl $msg # Argumentas nr.2: teksto eilutės adresas (rodyklė) pdushl $1 # Argumentas nr.1: failo deskriptorius movl $4, %eax # OS rašymo funkcija insint $0x80 # Iškviečiame OS funkciją, tekstas išvedamas į ekraną addl $12, %esp # Išvalome steką nuo argumentų pushl $0 # Išėjimo iš programos statusas movl $1, %eax # OS išėjimo iš programos funkcija int $0x80 # Iškviečiame OS funkciją, programa užbaigiama