INS/INSB/INSW - vstup z portu do řetězce
Verze z 9. 11. 2012, 22:57, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky)
- 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