Pereiti prie turinio

Asemblerio kalba

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Motorola MC6800 Assembly programos išvestis, pateikianti originalų programos tekstą, parašytą asemblerio kalba, ir sugeneruotą mašininį kodą

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
  1. 1 2 „x86 Assembly Language Programming“. Nuoroda tikrinta 2026-04-11.