Ins адреса_приймача,номер_порту (iNput String) - ввести елементи з порту вводу-виводу в ланцюжок.
Ця команда вводить елемент з порту, номер якого знаходиться в регістрі dx, в елемент ланцюжка, адреса якого визначається операндом адреса_приймача. Незважаючи на те, що ланцюжок, в який вводиться елемент, адресується зазначенням цього операнда, його адреса повинна бути явно сформована в парі регістрів es:edi/di. Розмір елементів ланцюжка має бути узгоджений з розмірністю порту - він визначається директивою резервування пам'яті, за допомогою якої виділяється пам'ять для розміщення елементів ланцюжка. Після пересилки команда ins проводить корекцію вмісту edi/di на величину, що дорівнює розміру елемента, який брав участь в операції пересилання. Як звичайно, при роботі ланцюжкових команд враховується стан прапора df.
.data pole db 10 dup (‘ ‘) .code ... push ds pop es ;налаштування es на ds mov dx,5000h lea di,pole mov cx,10 rep insb ... |
insb (INput String Byte) - ввести з порту ланцюжок байтів;
insw (INput String Word) - ввести з порту ланцюжок слів;
insd (INput String Double Word) - ввести з порту ланцюжок подвійних слів.
Приміром, виведемо 10 байт з області пам'яті pole в порт 5000h.
8. Виведення елемента ланцюжка в порт вводу-виводу
Дана операція дозволяє зробити виведення елементів ланцюжка в порт вводу-виводу. Вона реалізується командою outs, що має такий вигляд:
outs номер_порту, адреса_джерела (OUTput String) - вивести елементи з ланцюжка в порт вводу-виводу.
Ця команда виводить елемент ланцюжка в порт, номер якого знаходиться в регістрі dx. Адреса елемента ланцюжка визначається операндом адреса_джерела. Незважаючи на те, що ланцюжок, з якого виводиться елемент, адресується вказівкою цього операнда, значення адреси має бути явно сформовано в парі регістрів ds:esi/si. Розмір структурних елементів ланцюжка повинен бути узгоджений з розмірністю порту. Він визначається директивою резервування пам'яті, за допомогою якої виділяється пам'ять для розміщення елементів ланцюжка.
Після пересилання команда outs проводить корекцію вмісту esi/si на величину, що дорівнює розміру елемента ланцюжка, який брав участь в операції пересилання. При цьому, як звичайно, враховується стан прапора df.
Подібно команді ins, транслятор перетворить команду outs в одну з трьох машинних команд без операндів, що працюють з ланцюжками елементів визначеного розміру:
.data str_pech db 'Текст для друку ' .code ... mov dx,378h lea di,str_pech mov cx,16 rep outsb ... |
outsw (OUTput String Word) - вивести ланцюжок слів в порт вводу-виводу;
outsd (OUTput String Double Word) - вивести ланцюжок подвійних слів в порт вводу-виводу.
В якості прикладу розглянемо фрагмент програми, яка виводить послідовність символів в порт вводу-виводу, відповідного принтеру (номер 378 (LPT1)).
На закінчення згадаємо, що для організації роботи з портами недостатньо знати їх номери і призначення. Не менш важливо знати і розуміти алгоритм їхньої роботи. Ці відомості можна знайти в документації на пристрій (але, на жаль, далеко не завжди).