Ľudmila Jánošíková

Programovanie v jazyku symbolických adries

pre 32-bitové procesory Intel
Obsah Index
Inštrukcie pre presun údajov

Inštrukcie pre presun údajov kopírujú dáta z jedného miesta na druhé. Žiadna z tejto skupiny inštrukcií nemení príznakové bity:

OF SF ZF AF PF CF
- - - - - -

mov cieľ, zdroj (move data)

S inštrukciou mov sme sa už v predchádzajúcich kapitolách niekoľkokrát stretli. Je to asi najpoužívanejšia inštrukcia. Slúži na uloženie zdrojového operandu do cieľového operandu. Zdrojom môže byť:

Cieľom môže byť:

  • univerzálny register
  • segmentový register
  • pamäťové miesto

Zdôrazňujeme, že:

  • Nie je dovolená operácia typu pamäť – pamäť. To znamená, že ak je jedným operandom pamäťové miesto, druhým musí byť register, resp. konštanta.
  • Typy obidvoch operandov sa musia zhodovať (nie je dovolené uložiť napr. premennú typu byte do 16-bitového registra).

Výrazom, ktorý sa vyhodnotí ako konštanta, môže byť napr. výraz s operátorom offset:

mov ebx,offset Pocet; ulož do ebx offset premennej Pocet

Operátor offset ale nemôžeme použiť na získanie adresy pamäťového miesta, na ktoré sa odkazujeme nepriamym spôsobom (pomocou bázového alebo indexového registra). Napr. inštrukcia

mov ebx,offset Text[edi]

sa preloží tak, že do EBX sa uloží obsah slova na adrese Text + [EDI], a nie offset premennej Text zväčšený o EDI, čo sme chceli dosiahnuť. Ak chceme získať nepriamu adresu, musíme použiť nasledujúcu inštrukciu lea.

lea register, pamäť (load effective address)

Inštrukcia lea uloží offset pamäťového operandu do univerzálneho registra. Vykoná teda to isté ako inštrukcia mov s operátorom offset. Ako sme už uviedli v predchádzajúcom odstavci, na rozdiel od inštrukcie mov sa lea dá použiť aj v prípade, keď je pamäťový operand adresovaný nepriamo. Príklady:

lea ebx,Pocet; to isté ako mov ebx,offset Pocet
lea ebx,Text[edi]

Inštrukciu lea možno použiť na rýchle sčítanie a násobenie, napr.

lea ecx,[eax + ebx]; ecx := eax + ebx
lea eax,[eax + eax*4]; eax := 5*eax

movzx register, register/pamäť (move with zero-extend)

Inštrukcia movzx prenesie pravý 8- alebo 16-bitový operand do ľavého 16- alebo 32-bitového, pričom ho doplní binárnymi nulami do požadovanej veľkosti. Napr. inštrukcia

movzx bx,dl

je ekvivalentná s príkazmi

mov bl,dl
mov bh,0

movsx register, register/pamäť (move with sign-extend)

Inštrukcia movsx vykoná znamienkové rozšírenie pravého 8- alebo 16-bitového operandu do ľavého 16- alebo 32-bitového operandu. Znamienkové rozšírenie znamená, že nadbytočné bity sa naplnia hodnotou znamienkového bitu zdrojového operandu – nulou v prípade, že zdrojový operand je kladný, jednotkou, ak zdrojový operand je záporný.

xchg register/pamäť, register/pamäť (exchange)

Inštrukcia xchg vymení obsahy pravého a ľavého operandu.

Hore

Načo je vám jazyk symbolických adries?

Architektúra moderných procesorov

Registre

Spôsoby adresovania

Premenné a návestia

Symbolické konštanty

Inštrukčný súbor

Segmentové direktívy

Moduly

Služby operačného systému MS-DOS

Služby operačného systému Windows 95/98/NT/XP

Systémová úroveň vstupu a výstupu

Prostriedky pre prípravu programu

Inštrukčný súbor | Aritmetické inštrukcie
Vydala Žilinská univerzita v Žiline, 2000. ISBN 80-7100-723-4.
Otázky a pripomienky môžete poslať autorke.
Naposledy upravené 28.9.2015.