АРИФМЕТИЧНІ ОПЕРАЦІЇ МІКРОПРОЦЕСОРА INTEL 8086(80286)

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Системи автоматизованого проектуваня

Інформація про роботу

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Архітектура комп'ютерів
Група:
КН

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра САПР Лабораторна робота № 9 “ АРИФМЕТИЧНІ ОПЕРАЦІЇ МІКРОПРОЦЕСОРА Intel 8086(80286) ” Виконав Ст..гр. КН – 3 ЛЬВІВ 2008 1. МЕТА РОБОТИ Вивчити основні шляхи програмування портів клавіатури на ЕОМ з мікропроцесором Intel 8086(80286). 2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ. Одним з найважливіших пристроїв персонального комп’ютера є клавіатура, яка призначена для інтерфейсу між користувачем та комп’ютером. На даний час існує три основні типи клавіатур. Це клавіатура для комп’ютерів ІВМ РС/ХТ, яка містить 84 клавіші та 101-клавішна клавіатура для ІВМ РС/АТ. Деякі клавіатури містять переми- _ EMBED PBrush ___ кач режиму роботи (ХТ/АТ). В якості контролера виступає процесор Intel 8042, який призначений для обміну між клавіатурою та CPU. Всі горизонтальні лінії матриці підключені через резистор до джерела живлення +5В. Контролер клавіатури містить два порти - вхідний і вихідний. Вхідний порт підключений до горизонтальних ліній матриці (Х0-Х4), а вихідний - до вертикальних (Y0-Y4) Принцип роботи даного пристрою полягає в наступному. Контролер почергово на вертикальних лініях встановлює значення логічного нуля. Потім він почергово опитує горизонтальні лінії. У випадку, коли натиснутих клавіш не має, рівень напруги на всіх горизонтальних лініях буде відповідати логічній 1 (всі ці лінії підключені ло джерела живлення +5V через резистори). У випадку, коли натиснута клавіша - на відповідній горизотальній лінії буде логічний нуль. На наступному кроці визначається ASCII- код натиснутої клавіші. Для роботи з клавіатурою використовують порти з адресами 60Н та 61Н. Порт 60Н, при читанні, містить сканкод останньої натисненої клавіші. IN AL, 60H При використанні порта 60Н на запис програма додатково отримує наступні можливості: -встановлення затримки перед переходом клавіатури в режимі автоповтору; -встановлення періоду генерації скан-коду в режимі автоповтору; -керування світлодіодами для клавіш -Scroll Lock, Num Lock, Caps Lock. Для встановлення характеристик автоповтору в порт 60Н необхідно записати код команди 0F3Н, потім байт, що визначає характеристики режиму: біти значення 0-4 5-6 7 Період автоповтору 0-30.0; 0АН - 10.0; 1-26.7; 0DH - 9.2; 2-24.0; 19H - 7.5; 4-20.0; 14H - 5.0; 8-15.0; 1FH -2.0. Затримка включення режиму автоповтору: 00 - 250 01 - 500 10 - 750 11 -1000 Зарезервоване (має бути рівне 0) Період автоповтору визначає кількість посилок скан-коду, генерованих процесором клавіатури за одну секунду. Можна використовувати не лише ті значення, які приведені в таблиці, але й проміжні (наприклад 9 або 16Н). При керуванні світлодіодама використовують команду OEDH. Потім в порт 60Н необхідно записати байт, що має наступний формат: біти значення 0 1 2 3-7 1 - включити світодіод Scroll Lock 1 - включити світодіод Num Lock 1 - включити світодіод Caps Lock не використовується Використання портів при роботі з клавіатурою є дуже громіздкою роботою для програміста, тому більш зручно використати вже готові процедури і функції BIOS(Basic Input/Output System- Базова Система Вводу/Виводу), які розміщені в постійному запам’ятовуючому пристрої комп’ютера. Для вводу з клавіатури використовують переривання BIOS INT 16H та перевання DOS INT 21H. MOV AH, номер функції INT 16h Функція 00h - означає чекати до того часу, поки користувач не натисне клавішу. В результаті, у регістрі AL, отримаємо код ASCII символа, а якщо в AL нуль, то в AH - розширений код ASCII. Функція 01h - перевіряє готовність символа на ввід та виводить його, якщо він готовий. Контроль організований по значенню прапорця нуля, якщо клавішу натиснули, то ZF=0. В іншому випадку -ZF=1, тобто клавішу не натискали і черга пуста (ця функція не забирає символ з черги, а тільки перевіряє його наявність ) Функція 02h - читає статус Shift-клавіш. У результаті, в регістрі Al міститься статус клавіатури. Коли користувач натискає клавішу, то автоматично викликається апаратне переривання BIOS. Далі клавіша розпізнається і її код записується в так звану чергу (буфер клавіатури). Буфер клавіатури - спеціальна ділянка пам’яті відведена під збереження кодів натиснених клавіш. Саме з буфера клавіатури (по черзі) зчитуються ASCII-коди клавіш, коли ми викликаємо функцію BIOS INT 16h (АН=00h). Прочитаний символ з буфера стирається. якщо буфер клавіатури на момент виклику INT 16h (АН=00h) пустий, то ця функція зупиняє роботу програми і чекає до того часу, поки натиснуть будь-яку клавішу. (На відміну від INT 16h АН=01h, остання функція тільки вкаже, що клавіші готової нема. ZF=1). Наведемо приклад фрагменту програми, яка чекає на ввід клавіші `А`: ... mov ah,00h ; ввести символ int 16h ; з клавіатури cmp al,`A` ; це велика буква`А`? jnz tsukl ; якщо ні, то повторити цикл, ... ; тобто перейти на мітку tsukl Приклад фрагменту програми, яка чекає на натиснення будь-якої коавіші: ... tsukl mov ah,01h ; перевірити чи готова int 16h ; будь-яка клавіша... jz tsukl ; якщо ні-повторити, mov ah,0 ; якщо так-зчитати її ASCII-код int 16h ; в регістр AL ... Окрім 16Н-го переривання BIOS користувач, для роботи з клавіатурою, може використати 21Н-е переривання операційної системи MS-DOS. ... mov ah, номер функції int 21h ... Функції: 01h - ввести символ з стандартного вводу в регістр AL; 18h - аналогічна функція до 01Н, але введений символ буде відображений на дисплей; 07h - аналогічна функція до 01Н, але не перевіряється Ctrl-Break, Backspace і т.д. (так званий нефільтруючий ввід); 0Bh - отримати статус стандартного вводу і AL=0, якщо символа нема, та AL=0ffh, якщо є; 0Ch - очистити буфер клавіатури і викликати функцію вводу, вказану в регістрі AL при вході. (це може бути 041h, 07h, 08h або 0Bh); 0Ah - буферний ввід. Для цієї функції адреса буфера вводу міститься в регістрах DS:DX. Дана функція повертає у вказаному буфері введену користувачем стрічку (максимальна довжина стрічки має не перевищувати 254 символи). При вході, буфер, в який буде введено стрічку, має мати такий вигляд: +--------------------- | max| ? | ? ? ? ? ? +--------------------- де max- байт, який вказує максимальну довжину стрічку, яку може ввести користувач. max має значення від 1 до 254. Знаки питання символізують собою місце в пам`яті, яке зарезервоване для введеної користувачем стрічки. Під час виклику функції 0Ah їхні значення ніякої ролі не грають. При виході - буфер буде заповнений таким чином: +-------------------- |max| len| H I 0dH +-------------------- де len - довжина введеної користувачем стрічки (не враховуючи коду клавіші Enter - 0dh). H,I- коди ASCII відповідно `H`, `I`, тобто це та стрічка, яку ввів користувач. Символи вводяться з пристрою стандартного вводу до того часу, поки користувач не натисне Enter. Більше символів, ніж було описано при виклику в байті max функція ввести не дозволить. Під час вводу можна користуватися клавішою Backspace. Приведемо приклад виклику Dos-функції: Функція 01h ... mov ah,1 ; записати в AL int 21h ; символ, введений з клавіатури ... цей символ буде відображено на екрані при вводі з клавіатури, тобто, щоб користувач побачив символ на екрані програмісту не треба буде використовувати спеціальних функцій для друку, на відміну від функції BIOS, де необхідно організувати користувачу вивід символа на екран. Функція 08h ... mov ah,8 ; те ж що і функції 01h int 21h ; але символ на екран не відобразиться ... Функція 0Аh ;в регістр DX помістити зміщення адреси буфе- ... ;ра, а регістр DS має вказувати аналогічна mov dx,offset bufer ; функція до 01H сегмент даних. mov ah,0ah int 21h ;після цієї команди, якщо припустимо, що ... ;користувач ввів стрічку `Help` то буфер, який ret ;до того містив стрічку `123456789` прийме bufer: db 8 ;такий вигляд: db `1234456789` ;bufer: db 8 ;db 4 (--тобто довжина введеного слова `Help` ; db `Help`(--в 16-му коді це дорівнює 27h,48h,65h,6ch ;db4 0dh(--код клавіші Enter ;db`789`(--те що залишилося (ці символи не затерлися; введеною стрічкою) Індивідуальне завдання Ввести за допомогою клавіатури послідовність даних в ASCII кодах і виконати в ASCII над ними арифметичні операції: (121/11)+(144/12). Текст програми .model tiny .code org 100h start: mov ah,9 mov dx,offset message int 21h call perevid mov ax,dane mov oper1,ax call perevid mov ax,dane mov oper2,ax call perevid mov ax,dane mov oper3,ax call perevid mov ax,dane mov oper4,ax mov ax,oper1 mov bx,oper2 xor dx,dx div bx mov resm,ax call vuvid mov ax,oper3 mov bx,oper4 xor dx,dx div bx mov resd,ax call vuvid mov ax,resm mov bx,resd add ax,bx mov resdod,ax call vuvid mov ax,04c00h int 21h perevid: mov dx,offset buffer mov ah,0Ah int 21h xor cx,cx mov dane,cx mov cl,byte ptr [blenght] cmp cl,0 je pom mov di,-1 mov bx,1 cukl: mov di,cx xor ax,ax mov al,byte ptr bcontents[di-1] sub ax,30h cmp al,9 ja pom mul bx add dane,ax mov ax,bx mul m mov bx,ax loop cukl mov ah,9 mov dx,offset message1 int 21h ret vuvid: mov bx,ax xor si,si mov cx,5 mov ax,10000 mov word ptr [m1],ax perevidasci: mov ax,bx xor dx,dx div word ptr m1 push ax add ax,30h mov byte ptr res[si],al sub al,30h inc si pop ax mul m1 sub bx,ax mov ax,m1 xor dx,dx div word ptr m mov word ptr [m1],ax loop perevidasci mov ax,0A0Dh mov word ptr res[si],ax inc si inc si mov al,24h mov byte ptr res[si],al mov dx,offset res mov ax,0900h int 21h ret pom: mov dx,offset message2 mov ax,0900h int 21h jmp perevid ret ;pom1: ;mov dx,offset message2 ;mov ax,0900h ;int 21h ;jmp start ;ret message db "Vvedit pershe dane:",0Dh,0Ah,'$' message1 db 0Dh,0Ah,'$' message2 db "Vvedit korektno dani:",0Dh,0Ah,'$' res db 8 dup (" ") m dw 10 m1 dw 0 dane2 dw ? dane dw 0 oper1 dw ? oper2 dw ? oper3 dw ? oper4 dw ? resm dw ? resd dw ? resdod dw ? buffer db 5 blenght db ? bcontents: end start Висновок На цій лабораторній роботі я вивчив основні шляхи програмування портів клавіатури на ЕОМ з мікропроцесором Intel 8086(80286).
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!