IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

2. diel - Assembler - Vytvorenie NASM projektu, registre a prerušenie

V minulej lekcii, Úvod do programovania v Assemblera , sme si povedali čo to Assembler vlastne je, prečo sa ho učiť, a dokonca si aj ukázali ako vyzerá.

Dnes sa pozrieme na to, aký zvoliť software pre vývoj v ASM, založíme svoj prvý ASM projekt a povieme si čo sú to registre a prerušenia.

Software pre programovanie v ASM

Pre vývoj v ASM budeme ako pre vývoj v každom jazyku potrebovať editor kódu a prekladač. Síce nepotrebujeme prekladač vo význame prekladača programovacieho jazyka do binárky, ale stále musíme náš ASM kód nejako previesť na spustiteľnú binárku. Vieme, že píšeme inštrukcie slovami, čísla v desiatkovej sústave a tomu by počítač ešte stále nerozumel.

Editor

Vlastne je na každom z nás, aký editor kódu zvolíme, pretože súbory budeme vždy ukladať vo forme textu, ale namiesto prípony .txt použijeme príponu .asm. Ja osobne dávam prednosť PSPadu, pretože je to priamo vývojársky editor. Pre začiatok môžeme použiť ale aj obyčajný textový editor (Poznámkový blok).

Kompilátor

Vo výsledku nechceme súbor vo forme textu, ale binárny súbor. Takéto najznámejšie kompilátory ASM do binárneho kódu sú:

  • NASM - Netwide Assembler - Populárna multiplatformový ASM používajúci syntax Intel.
  • FASM - Flat Assembler - Ďalšie veľmi dobrý multiplatformový prekladač ASM, je o niečo novší ako NASM.
  • MASM - Microsoft Macro Assembler - Veľmi populárna Assembler, ale ako asi tušíte, je viazaný na Windows / MS-DOS a nemá otvorenú licenciu.
  • GNU Assembler (GAS) - Východisková prekladač pre GCC (kompiler céčka a teda celého Linuxu), používa staršie štandard AT & T, nie Intel.
  • Taśma - Možno pamätáte staršie prekladač od firmy Borland. Bol vyvíjaný v rokoch 1989-1996. Turbo Assembler podporuje len tvorbu 16 a 32-bitových programov. V určitom režime možno taśma použiť ako MASM.

NASM

My budeme používať NASM, voľba je čisto osobné a v budúcnosti si môžete vyskúšať aj ďalšie kompilery. NASM si stiahnite na https://www.nasm.us/

NASM za nás teda vlastne prevedie slová do strojového kódu. Stiahnutie a inštaláciu iste zvládnete. Pre preklad našich programov môžeme použiť príkazový riadok (CMD). Ešte efektívnejšie ale bude napísať si pomocný súbor vo skriptovacom jazyku Batch. V kurze budeme prekladať pre Windows, na Linuxe si určite zvládnete vytvoriť analogický Bash skript.

Vytvorenie prvého ASM projektu

Najprv si niekde vytvoríme novú zložku Assembler/ pre všetky naše projekty. Tu urobíme podpriečinok Tools/. Do zložky Tools/ vložíme stiahnutý NASM a vrátime sa o zložku späť.

Tam vytvoríme zložku HelloWorld/, čo je projekt, ktorý teraz budeme programovať. Vnútri HelloWorld/ vytvoríme ešte dve posledné zložky. Najprv Source/ a potom Bin/.

Zostavenie

Teraz otvoríme editor a vložíme do neho tento kód v Batch:

echo off
title Assembling...
cls
echo Assembling Hello, World!...
..\Tools\nasm.exe -fbin -o Bin\hlwrld.com Source\hlwrld.asm
echo.
pause
exit

Súbor uložíme ako Sestavit.bat v priečinku HelloWorld/. Takto nebudeme musieť pre každú kompiláciu opakovane písať do príkazového riadku, ale len otvoríme súbor.

Možno ste si všimli skráteného názvu hlwrld. To je preto, že tento program budeme spúšťať v 16-bitovom emulátora, kde je názov súboru obmedzený na 8 znakov.

Registre a prerušenie

Pre programovanie v ASM je nutné používať registre a prerušenia. Poďme si ich vysvetliť.

Registre

Už minule sme si spomenuli, že registre sú rýchla pamäť priamo v procesore a budeme s nimi pracovať veľmi často. Sú to vlastne také predpripravené premenné, priamo vypálené v kremíkové doštičke procesore, ktorých je samozrejme obmedzený počet.

počítačový procesor - Assembler

Tieto premenné sa používajú na kľúčových miestach našich programov, odovzdávame cez ne napr. Argumenty funkciám, ukladáme tam počítadlo cyklov a podobne. Keby bolo kvôli týmto operáciám potreba posielať dáta do pamäte RAM, bol by program zbytočne pomalý. Rovnako, ako pamäť RAM uľavuje pevnému disku z výkonnostných dôvodov, registre a cache v procesore uľavujú pamäti RAM.

Registre Intel 8086

Dlho mali registre 32 bitov, dnes sú aj väčšie. Rôzne registre majú rôzne označenia a účel. U prvého Intel procesora z rodiny x86, 8086, boli všetky registre 16bitové a boli rozdelené do nasledujúcich kategórií:

  • Univerzálne registre (General purpose Registers)
  • Indexové (Index Registers)
  • Stavové a kontrolné (Status and Control Registers)
  • Segmentové (Segment Registers)

Počas kurzu si ich podrobne vysvetlíme. Vidíme, že nevyhnutnou podmienkou k programovaniu v ASM teda nie je len znalosť ASM, ale aj znalosť architektúry x86.

Tieto registre ďalej existujú aj v súčasných PC, len samozrejme pribudli ďalšie modernejšie štandardy, príkladom môže byť technológie MMX Pentia a ďalšie.

Prerušenie

Registre sú teda vlastne premenné v procesore. A na čo potrebujeme prerušenie? Pri vykonávaní programu sa musí tiež obsluhovať určité hardvérové a softvérové udalosti. Za hardvérové udalosti môžeme považovať napríklad stlačenie klávesy alebo pohyb myšou. Za softvérovej napríklad ovládanie klávesnice a myši. Pri takomto prerušení dochádza k prerušeniu práve vykonávanej úlohy, ku ktorej sa procesor neskôr vráti. Od toho teda názov prerušenia, anglicky interrupt.

Mechanizmus prerušenie je nasledovné:

  1. Radič prerušenia dostane žiadosť o prerušenie
  2. Mikroprocesor prijme signál o prerušení
  3. Radič prerušenia vyšle na dátovú zbernicu inštrukciu INT + číslo
  4. Prebehne obsluha prerušenia
  5. Procesor sa vracia k pôvodnej úlohe s obnovenými registrami

Inštrukcie INTjediný parameter. Tento parameter je číslo v rozsahu 0255. Podľa čísla sa vykonáva určitá hardvérová prerušenia. Dôležitou informácií ale je, že nie všetky tieto čísla sú obsadené hardvérovými prerušeniami, ale aj službami, ktorými sú práve už spomínaná softvérová prerušenia. Ako príklad si môžeme opäť uviesť známe prerušenia INT 21H, ktoré nájdeme v operačnom systéme MS-DOS alebo INT 80H, ktoré nájdeme v Linuxe. Niektoré softvérová prerušenia, ktorá budeme používať, nám ponúka priamo BIOS (napr. Video-prerušenie INT 10H). To použijeme k výpisu znakov na obrazovku.

A čo robí v prerušenia písmeno H ? Prerušenie typicky zadávame ako číslo v šestnástkovej (Hexadacemální) sústave. INT 10H je teda prerušenie číslo 16.

Z pohľadu vyšších programovacích jazykov sú prerušenia ekvivalentom rozhrania, s ktorými môžeme z našich programov pracovať, podobne ako napríklad knižnice.

Pretože sa budeme zaoberať aj písaním vlastného operačného systému, nebudeme používať prerušenia, ktorá ponúka iné operačné systémy (napríklad MS-DOS - INT 21H a Linux - INT 0x80). To ale neznamená, že sa im úplne vyhneme. Neskôr si ukážeme, ako napísať aplikáciu pre MS-DOS a Windows, aby sme pochopili, ako je tomu u už existujúcich operačných systémov.

Postupne sa dostaneme aj k tvorbe vlastných prerušenia, ale tým vás zatiaľ desiť nebudem:)

Týchto kódov budeme využívať pri stláčaní znakov pomocou prerušenia BIOSu.

V budúcej lekcii, Assembler - Prvý program - Hello world! , naprogramujeme svoju prvú aplikáciu v Assemblera, Vyhlasujúca text Hello world! do videopamäte.


 

Predchádzajúci článok
Úvod do programovania v Assemblera
Všetky články v sekcii
Assembler
Preskočiť článok
(neodporúčame)
Assembler - Prvý program - Hello world!
Článok pre vás napísal Jakub Verner
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v x86 Assembleru.
Aktivity