Jazyk symbolických inštrukcií

z Wikipédie, slobodnej encyklopédie
Prejsť na: navigácia, hľadanie

Jazyk symbolických inštrukcií alebo jazyk symbolických adries (skr. JSI či JSA), nesprávny populárny názov tiež assembler či asembler pozri (asembler) je pre ľudí na čítanie vhodná forma strojového kódu. Zjednodušenie je založené na nahradení binárnych kódov skrátenými názvami (tzv. mnemonikou) „príkazov“ (inštrukcií).

Pracovať priamo so strojovým kódom je pre človeka veľmi zložité, pretože programy v strojovom kóde sú postupnosťami čísel. Preto bolo potrebné vytvoriť jazyk, ktorý by bol zrozumiteľný pre človeka a zároveň by bol priamočiaro transformovateľný do strojového kódu. Jazyk symbolických adries je programovací jazyk, v ktorom každý kód inštrukcie generuje jednu inštrukciu strojového jazyka, viazanú na konkrétny procesor počítača, kontrastne k vyššiemu programovaciemu jazyku, kde príkaz už neviaže na konkrétny počítač alebo operačný systém).

Napríklad v počítači s procesorom kompatibilným s architektúrou x86/IA-32 tento strojový kód:

10110000 01100001

možno v JSI zapísať takto:

mov  al, 061h

čo znamená, že treba presunúť hodnotu 61 v šestnástkovej sústave (97 v desiatkovej) do registra s názvom „al“.

Základné pojmy[upraviť | upraviť zdroj]

  • Inštrukcia procesora – základný prvok činnosti, ktorú vykonáva procesor (Central Processor Unit).
  • Register – (register procesora) malá, veľmi rýchla pamäťová oblasť umiestnená vo vnútri procesora. Register je pomenovaný. Možno do neho uložiť obvykle len niekoľko bitov informácií. Je používaný ako dočasný pamäťový priestor pre dáta, s ktorými sa práve počíta.
  • Adresa – celé číslo ukazujúce na miesto v pamäti
  • Prerušenie – je udalosť, pri ktorej procesor prestane vykonávať inštrukcie práve vykonávaného programu a dočasne začne vykonávať program iný, obsluhujúci prerušenie
  • ALU (aritmeticko logická jednotka) – Vykonáva operácie spojené so spracovaním dát: matematické, logické a posuvy (rotácie).
  • Pamäť – (memory) zariadenie umožňujúce uchovať informácie (vo forme binárne kódovaných dát).
  • Adresa v pamäti – číselné označenie miesta v pamäti
  • Radič – zariadenie prevádzajúce príkazy v symbolickej forme (inštrukcie) na postupnosť signálov ovládajúcich pripojené zariadenie

Niektoré inštrukcie procesorov typu x86[upraviť | upraviť zdroj]

Inštrukcia MOV[upraviť | upraviť zdroj]

Syntax: MOV cieľ, zdroj

Slúži k presunom, kopírovaniu zdrojového operandu do cieľového. Všetky operandy inštrukcie mov musia mať rovnakú veľkosť.

Príklad použitia:

 mov ax, [cislo]   ;do registra ax vloží hodnotu premennej cislo
 mov [cislo], ax        ;do premennej cislo vloží hodnotu registra ax
 mov bx, cx     ;do registra bx vloží hodnotu registra cx
 mov al, 1      ;do registra al vloží konštantu 1
 mov ax, 0      ;vynuluje register ax (al aj ah)

Aritmetická inštrukcia ADD[upraviť | upraviť zdroj]

Syntax: ADD o1, o2 Sčíta oba operandy a výsledok uloží do operandu o1, jeho predchádzajúca hodnota je stratená.

Príklad použitia:

 mov ax, 5 ;do registra ax vloží 5
 mov cx, 10     ;do registra cx vloží 10
 add cx, ax     ;sčíta cx + ax = cx

Aritmetická inštrukcia SUB[upraviť | upraviť zdroj]

Syntax: SUB o1, o2 Odčíta o1 – o2 a výsledok sa uloží do o1; jeho pôvodná hodnota sa stratí.

Príklad použitia:

 add eax, 10       ;k registru eax pripočíta 8
 sub ecx, ebp   ;register ecx – ebp = ecx
 sub ah, al     ;od registra ah odčíta al a výsledok uloží do ;ah

Aritmetická inštrukcia INC a DEC[upraviť | upraviť zdroj]

Syntax: INC o1 alebo DEC o1 Inštrukcia pripočítava (INC) alebo odpočítava (DEC) jediný operand o jednotku.

Príklad použitia:

 add al, 1 ;správne ale požiadavku možno 
 inc al ;splniť aj takto
 dec dx ;odčítame 1 od hodnoty registra dx
 inc word [cislo]       ;pripočítame 1 do šestnásťbitovej premennej ;číslo, napovedali sme rozsah (0-65535, tj. 16 ;bitov)

Aritmetická inštrukcia MUL a DIV[upraviť | upraviť zdroj]

Syntax: MUL r/m8/16/32 alebo DIV r/m8/16/32

Inštrukcia MUL (multiply) slúži na násobenie, DIV (divide) slúži na delenie. Aby nebola inštrukcia MUL a DIV príliš zložitá, bolo rozhodnuté, že jeden operand a výsledok bude uložený v (rovnakom) pevne danom registre. Umiestnenie druhého operandu bolo ponechané na programátorovi.

Príklad použitia:

 mov al, bh        ;register bh nahrá do al
 mul cl ;vynásobí al s cl, výsledok bude uložený v ax
 mov ax, 25     ;do ax vložíme 25
 mov cl, 5      ;do cl vložíme 5
 div cl ;vydelíme cl (ax / cl = výsl. (v registri ax))
 mov bx, ax     ;výsledok prekopírujeme do bx