Слайд 2Назначение
Команды INS, INSB, INSW, INSD позволяют несколько автоматизировать операции получения данных из
![Назначение Команды INS, INSB, INSW, INSD позволяют несколько автоматизировать операции получения данных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176923/slide-1.jpg)
порта ввода-вывода. По сути эти команды выполняют команду IN, только результат помещается не в регистр, а в ячейку памяти, адресуемую парой регистров ES:(E)DI.
Слайд 3Основные действия
Команда INS:
Ввод из порта в строку. Команда INS как и команда
![Основные действия Команда INS: Ввод из порта в строку. Команда INS как](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176923/slide-2.jpg)
CMPS не является командой процессора. Когда в тексте программы встречается эта команда, компилятор вычисляет размерность ее операнда и на основании вычислений подставляет на ее место одну из реальных команд процессора INSB, INSW или INSD.
Команда INSB:
Ввод байтов из порта в строку. Пересылает байт данных из заданного регистром DX порта ввода в ячейку памяти по адресу ES:DI. После выполнения пересылки регистр DI увеличивается на 1.
Слайд 4Основные действия
Команда INSW:
Ввод 2-байтовых значений из порта в строку. Пересылает слово данных
![Основные действия Команда INSW: Ввод 2-байтовых значений из порта в строку. Пересылает](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176923/slide-3.jpg)
из заданного регистром DX порта ввода в ячейку памяти по адресу ES:DI. После выполнения пересылки регистр DI увеличивается на 2.
Команда INSD:
Ввод 4-байтовых значений из порта в строку. Пересылает байт данных из заданного регистром DX порта ввода в ячейку памяти по адресу ES:DI. После выполнения пересылки регистр DI увеличивается на 4.
Слайд 5Пример реализации
Выбор команды будет зависеть от того, какое значение нужно передать из
![Пример реализации Выбор команды будет зависеть от того, какое значение нужно передать](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176923/slide-4.jpg)
порта байт, 2-байт, 4-байт или строку.
Со строчкой все легко:
ins es:str1, dx
А с байтами в зависимости от кол-во байт:
mov dx,03DFh
sub di,di
in(s/b/w/d)