Thursday, June 16, 2011

HW: Strojove instrukcie a jazyk symbolickych instrukcii

Strojovych instrukcii je velke mnozstvo a lisia sa v zavislosti na architekture. Priklad som instrukcie pre pracu s datami, aritmeticke operacie, instrukcie skoku a pod. Kazda z nich ma svoj kod. Predstavte si, ze by ste v tychto instrukciach chceli programovat. Museli by ste vypicovat ciselne kody instrukcii, poznat adresy oprandov v pamati a pod. Preto tu mame nieco, co nam umoznuje istu abstrakciu a to nazyvame jazykom symbolickych instrukcii, tzv. assembler. Assembler nam umoznuje zadavat instrukcie pomocou ich mena a operandov. Takyto program je nasledne prelozeny prekladacom na ciselne vyjadrenie, ktore moze byt spracovane procesorom.


Instrukcie assembleru mozme rozdelit do troch typov. Zakladne instrukcie, pseudoinstrukcie, makroinstrukcie. 

Zakladne instrukcie zodpovedaju instrukciam strojoveho jazyka. Zakladne instrukcie sa skladaju z 

                         navestie     symbolicky ooeracny znak     operandy instrukcie 

Zakladne typy operandov su registry, konstanty alebo mena. Registre su oznacovane symbolicky, konstanty su vyjadrene pomocou niektorej z ciselnych sustav (2,8,10,16) alebo textovo v apostrofoch. Mena oznacuju konstantu alebo symbolicke adresy. Prepojenie medzi symbolickou adresou a skutocnou adresou je na prekladaci. 

Medzi zakladne instrukcie (pre x86) mozme zahrnut 
  • instrukcie pre presun dat
    MOV, PUSH, POP ... 
  • aritmeticke instrukcie
    ADD, SUB, INC 
  • logicke instrukcie
    AND, OR, XOR 
  • instrukcie pre posuvy
    SHL, SHR 
  • instr. pre nastavenie hodnot priznakov
    CLC, CMC ... 
  • instrukcie skoku
    JMP, JC, JNC 
  • instrukcie cyklu
    LOOP 
  • instrukcie volania podprogramu
    CALL, RET
  • intrukcie pre prerusenie
    INT, IRET
  • specialne instrukcie (praca s retazcami, vstup/vystup)
    MOVS, CMPS 
Pseudoinstrukcie, ktore sluzia ako informacie pre prekladac a zahrnuju definicie konstant, vyhradenie usekov pamate pre pole a pod. Tu patri napriklad deklaracia slabiky (byte) DB, deklaracia slova DW. Znakove a textove udaje su kodovane bud po znakoch alebo ako textove retazce DB 'P', 'R', 'A', ci DB 'PRAHA'. 

zopakujme este, ze slabika je byte = 8 bitov, slovo su 2 slabiky a double word su dve slova = 32 bitov. 

Procedury
Istou sadou instrukcii mozme program instruovat k volaniu procedur. Proceduram sa preda riadenie (o tom inkedy) a v tej chvili prebieha program, ktory je uvedeny v procedure. Riadenie sa musi podat spat. Procedury vyuzijeme tam, kde sa nam opakuje nejaka cast kodu. Procedura je tak zaradena len raz, co je uspora voci opakovenmu kodu.
Instrukcia pre volanie procedury: CALL 
Navrat z procedury: RET
proceduru deklarujeme navestim. 

Makroinstrukcie reprezentuju cinnost skupiny instrukcii. Makroinstrukcie sluzia k strukturalizacii programu. Majmu podobne vlastnosti, ako procedury, ale zaroven mnoho odlisnosti. Popisuju upravy textu programu, lepsie povedane, je to predpis, ktorym vravia, ako ma byt urcita cast programu nahradena inym textom.  Rozdiel makroinstrukcii voci proceduram je ten, ze upravy prebehnu este pred prekladom. Ked vytvorime makro, tak deklarovana cast textu v makre je vlozena na miesto volania makra. Toto nazyvame rozvojom makroinstrukcie. Ak volame proceduru, tak jej musime predat riadenie, v makre to nie je potreba. 

                     meno_makra     MACRO       zoznam formalnych parametrov
                     meno_makra     ENDM