Asemblerio kalba
| Šiam straipsniui ar jo daliai reikia daugiau nuorodų į patikimus šaltinius. Informacija Vikipedijoje turi būti patikrinama. Paieškokite patikimų šaltinių ir paremkite straipsnio medžiagą išnašomis į šaltinius. |

Asemblerio kalba – žemo lygio programavimo kalba, skirta tam tikros architektūros procesorių instrukcijoms žymėti. Turi tiesioginę ir nedviprasmišką sąsają su mašininiu kodu. Tinkamai asemblerio kalba parašytą programos kodą visada galima paversti į mašininį kodą ir atgal. Šis procesas vadinamas transliavimu.
Asemblerio kalbos komandų vertimas į mašininę kalbą atliekamas [[asembleris|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ą.
Lygiai kaip ir mašininis kodas, kiekviena asemblerio kalba priklauso nuo konkrečios procesoriaus architektūros – instrukcijų lentelės, registrų skaičiaus, sistemos kvietinių ir kitų parametrų. Dėl šios priežasties, asemblerio kalba parašytas programinis kodas nėra suderinamas su kitomis procesoriaus architektūromis nei tai, kuriai ta kalba yra skirta. Viena procesoriaus architektūra gali turėti keletą skirtingų tarpusavyje nesuderinamų asemblerio programų, naudojančių skirtingas asemblerio kalbas, kaip antai, x86_64 architektūros ekosistemoje naudojami NASM, Microsoft priklausantis MASM, GNU projekto gas, TASM ir kt.[1]
Į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[1].
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
Išnašos
[redaguoti | redaguoti vikitekstą]- 1 2 „x86 Assembly Language Programming“. Nuoroda tikrinta 2026-04-11.