![]() Tak to jsem já Moje linky Stáhněte si Assembler 86 Učebnice Instr. soubor K čemu ASM86? Delphi Síťové aplikace Ikony v liště English version |
![]() Instrukce dosazení adresyI když jsme si již popsali, jak dosadit hodnotu adresy do některého z adresových registrů, nebyly možnosti ještě vyčerpány. Nejjednodušší je použití instrukce:
Paměť je v tomto případě označena jako v instrukci MOV. Instrukce LEA BX, BYTE PTR [$FF00] a MOV BX, $FF00 jsou ekvivalentní. Protože druhá instrukce je jednodušší, neměla by instrukce LEA význam. Proto ji častěji použijeme při hledání hodnoty kombinované adresy (LEA DI, 100[BX][SI] - sečte registry s číslem 100 a dosadí výsledek do DI). Pro nás má význam i ve vkládaném assembleru. Zápis LEA BX, proměnná je jednodušší něž MOV BX, offset proměnná (i když instrukce vykonají stejnou práci). Příklad:
Zatím jsme ovlivňovali jen registry s offsetem. Přestože bychom byli schopni dosadit i segment, bylo by nutné použít nejméně tři instrukce (nezapomeňte, že MOV neumí dosadit hodnotu do segmentového registru přímo). Abychom pochopili úspornější instrukci, musíme si zopakovat pojem ukazatel. UkazatelJe typ proměnné, který nese
celou adresu určitého místa v paměti. S pomocí těchto
proměnných můžeme potom dosazovat hodnoty na místa, kam
ukazují. Častěji myslíme označením ukazatel právě tyto
proměnné.
Kromě ukazatelů na daný typ existují i ukazatele obecně (typ pointer). Tyto typy jsou pro nás důležité. Čtyři slabiky, které jsou pro proměnnou tohoto typu vyčleněny, nesou totiž segment i offset adresy, kam ukazatel směřuje. V assembleru existují dvě instrukce, které jsou schopny adresy uložené v ukazateli dosadit do registrů segmentu i offsetu:
Příklad:
![]() |