INS/INSB/INSW - vstup z portu do řetězce

From Delphi & Pascal (česká wiki)
Jump to navigation Jump to search
Instrukce
INS/INSB/INSW - vstup z portu do řetězce
Časování
5 (80286), 5-8 (80386)
Popis
Instrukce INS přesouvá byte nebo slovo řetezce na paměťové místo specifikované ES:DI. Registr DX (EDX) ukazuje přitom na vstupní port. Instrukci INS je přesouván byte nebo slovo podle prvního operandu instrukce INS. Operand v paměti musí být adresovatelný z registru ES. Instrukce INS nedovoluje, aby bylo číslo portu specifikováno jako bezprostrední hodnota. Port může být adresován jen při použití registrů DS. Po provedení instrukce je registr DI (EDI) automaticky inkrementován/dekrementován. Jestliže je DF = 0 (byla provedená instrukce CLD), je DI (EDI) inkrementován. Jestliže je DF = 1 (byla provedena instrukce STD), je DI (EDI) dekrementován. Inkrement/dekrement je roven 1 pro bytový přesun, 2 pro slovní přesun.


Syntaxe
INS destination_string, port
INSB (žádné operandy)
INSW (žádné operandy)


Ovlivňuje příznaky
žádné


Nedefinované příznaky
žádné


Výjimky v privilegovaném módu
Jestliže je hodnota CPL (Current Privilege Level) větší než hodnota IOPL, je generována všeobecná výjimka přivilegovaného módu. Táto výjimka je generována také v případe, že místo určení (cílový řetezec) leží v segmentu, do nehož nelze zapsat. Jestliže registry CS, DS nebo ES obsahují neplatné efektívní adresy operandu, je generována všeobecná výjimka porušení ochrany paměti. Jestliže SS obsahuje neplatnou adresu, je generována výjimka "chyba zásobniku".


Výjimky v reálnem módu
Při umístení slovního operandu na offsetu 0FFFFH je generováno přerušení INT 13.


Poznámka pro 80386
Šírka slova je 32 bitů. Adresy v paměti jsou vytvářený ze 32-bitových efektívnich adres. Číslo portu je vzato z registru DX. Efektívní adresa neovlivní adresu I/O portu.


Příklad
 INS  BTE_STRG, DX   ; vstup bytu
 INS  WRD_STRG, DX   ; vstup slova

 INSB  ; vstup byte
 INSW  ; vstup slova