Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._13.doc
Скачиваний:
2
Добавлен:
11.08.2019
Размер:
256.51 Кб
Скачать

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

...

Подібно командам, які реалізують розглянуті вище ланцюжкові операції-примітиви, транслятор перетворить команду ins в одну з трьох машинних команд без операндів, котрі працюють з ланцюжками елементів визначеного розміру:

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

...

outsb (OUTput String Byte) - вивести ланцюжок байтів в порт вводу-виводу;

outsw (OUTput String Word) - вивести ланцюжок слів в порт вводу-виводу;

outsd (OUTput String Double Word) - вивести ланцюжок подвійних слів в порт вводу-виводу.

В якості прикладу розглянемо фрагмент програми, яка виводить послідовність символів в порт вводу-виводу, відповідного принтеру (номер 378 (LPT1)).

На закінчення згадаємо, що для організації роботи з портами недостатньо знати їх номери і призначення. Не менш важливо знати і розуміти алгоритм їхньої роботи. Ці відомості можна знайти в документації на пристрій (але, на жаль, далеко не завжди).

13

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]