Организация ввода-вывода на ассемблере 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Организация ввода-вывода на ассемблере



 

Ввод-вывод данных в компьютер осуществляется посредством различных периферийных устройств. Общение процессора с различными периферийными происходит через систему прерываний. Для ввода-вывода данных служит прерывание int 21h.

Основная последовательность дей­ствий при использовании прерываний 2lh (DOS):

1. Поместить номер функции в регистр ah.

2. Поместить передаваемые функции параметры в определенные регистры (они приведены при описании каждой функции).

3. Вызвать прерывание 2lh (DOS) командой int 21h

4. Извлечь результаты работы функций из определенных регистров. Какие именно регистры и что они содержат после возврата управления из функ­ции программе пользователя, указывается при описании каждой функции.

Прерывание DOS 2lh предназначено для предоставления программисту раз­личных услуг со стороны операционной системы. Этими услугами является набор функций. Какая именно функция должна быть вызвана, указывается числом в регистре ah.

 

Некоторые функции DOS (int 21 h)

Назначение Номер функции Вход Выход
Ввод символа с ожиданием и эхосопровождением ah-0lh   аl- ASCII-код символа
Вывод символа ah-02h   dl- ASCII-код символа  
Вывод символа на принтер ah-05h dl- ASCII-код символа  
Ввод символа с ожиданием и без эхосопровождения ah-07h ah-08h   al- ASCII-код символа (функция 08h при вводе проверяет, не нажато ли CTRL-BREAK)
Вывод строки на экран ah-09h ds:dx = адрес строки с символом <$> на конце Введенная строка в буфере
Ввод строки с клавиатуры ah-0ah ds:dx-anpec буфера с форматом: 1 байт — размер буфера для ввода (формирует пользователь); 2 байт — число фактически введенных символов (заполняет система по окончанию ввода — нажатию клавиши Enter (Odh)). Символ 0dh не учитывается во втором байте буфера; 3 байт и далее — введенная строка с символом 0dh на конце  
Проверка состояния буфера клавиатуры ah - 0bh   al=0 — буфер пуст al = 0ffh - в буфере есть символы

 

Пример 2. Программа ввода символа с клавиатуры

model small.stack 100h.data.code start:;занесение в сегментный регистр адреса сегмента данных mov   ax, @data mov   ds, ax;помещаем в регистр ah номер функции, которая вводит символ mov   ah, 01h int      21h            ;вводим символ с клавиатуры;символ введенный с клавиатуры находится в регистре al mov    ax,4 c 00 h int       21 h;выход из программы

End start

Пример 3. Программа вывода символа на экран

model small. stack 100 h.data f db   'ф'  ;помещаем в переменную f выводимый символ. code start:;занесение в сегментный регистр адреса сегмента данных mov   ax, @data mov   ds, ax;помещаем в регистр ah номер функции, которая выводит символmov   ah, 02h mov   dl, f; помещаем в dl символint      21h;выводим символ на экран mov    ax,4 c 00 h int       21 h;выход из программы

End start

 

Пример 4. Вывод строки на экран

model small.stack 100h.data f db   'строка вывода$';f – строковая переменная, которая обязательно заканчивается знаком $. code start:;занесение в сегментный регистр адреса сегмента данных mov   ax, @data mov   ds, ax;помещаем в регистр ah номер функции, которая выводит строку на экранmov   ah, 09h mov   dx, offset f; помещаем в dx адрес строки, которую выводимint      21h;выводим строку mov    ax,4 c 00 h int       21 h;выход из программы

End start

 

Организация вычислений

Логические команды

Система команд микропроцессора содержит пять логических команд. Эти команды выполняют логические операции над битами операндов. Размерность операндов должна быть одинакова. В качестве операндов могут использоваться, регистры, ячейки памяти (переменные) и непосредственные операнды (числа). Любая логическая команда меняет значение следующих флагов of, sf,zf,pf,cf (переполнение, знак, нуля, паритет, перенос)

and операнд_1,операнд_2 — операция логического умножения (И - конъюнкция).

and ah, 0a1h; ah:=ah٧0ah

and bx, cx;             bx:=bx٧cx

and dx, x1;            dx:=dx٧x1

Команда and может применяться для сброса определенных битов в 0 или для определения значения некоторых битов. Например, необходимо 5й бит числа находящегося в bl установить в 0, остальные биты не трогать.and bl, 11011111b или and bl, 0cfh Если необходимо определить чему равен 5й бит, тоand bl, 00100000b или and bl, 20hВ результате если в регистре bl в 5м бите был 0, то после выполнения этой команды мы получим нулевой результат, обнулим весь регистр. Если же в регистре bl в 5м бите была 1, то мы получим не нулевой результат.

or операнд_1,операнд_2 — операция логического сложения (ИЛИ - дизъюнкцию)

or al, x1;                       al:=al & x1

or eax,edx;                    eax:=eax & edx

or dx, 0fa11h;     dx:=dx & 0fa11h

 

Команда or может применяться для установки определенных бит в 1. Например, необходимо установить в единицу 4й и 7й биты регистра ah.

or ah, 10010000b         или or ah, 90h

 

xor операнд_1,операнд_2 — операция логического исключающего сложения (исключающего ИЛИ ИЛИ-НЕ). Команда может применятся для выяснения того какие биты в операндах различаются ил для инвертирования состояния заданных бит в операнде_1. Например, необходимо определить совпадает ли содержимое регистров ax и dx

xor ax, dx            ;если содержимое совпадает то в регистре ах мы получим

;нулевой результат, иначе не нулевой результат.

xor bh,10b           ; инвертировали 1й бит в регистре bh

 

test операнд_1,операнд_2 — операция “проверить” (способом логического умножения). Команда выполняет поразрядно логическую операцию И над битами операндов операнд_1 и операнд_2. Состояние операндов остается прежним, изменяются только флаги zf, sf, и pf, что дает возможность анализировать состояние отдельных битов операнда без изменения их состояния.

not операнд — операция логического отрицания. Команда выполняет поразрядное инвертирование (замену значения на обратное) каждого бита операнда. Результат записывается на место операнда.

not ax;ax:=

Пример 5. Логическое сложение двух однобайтных чисел.

model small.stack 100h.data x1      db   0c2h;первое слагаемоеx2      db   022h;второе слагаемоеy db  ?    ;переменная результата. code start: mov    ax,@ data mov    ds, ax mov   al, x1;в al помещаем первое слагаемоеor       al, x2;осуществляем логическое сложение, результат в almov   y, al;помещаем результат на место mov   ax,4c00h int      21h

End    start

Следующие две команды позволяют осуществить поиск первого установленного в 1 бита операнда. Они появились в 486 процессоре.

bsf операнд _1, операнд _2 – сканирование бит операнда_2 от младшего к старшему в поисках первого бита установленного в 1. Если такой обнаружится, то в операнд_1 заноситься номер этого бита в целочисленном формате.


Пример:

mov al,02h

bsf bx,al; bx:=1, т.к. 1й бит регистра al=1

bsr операнд _1, операнд _2 – сканирование бит операнда_2 от старшего к младшему в поисках первого бита установленного в 1. Если такой обнаружится, то в операнд_1 заноситься номер этого бита в целочисленном формате.

Пример:

mov al,82h

bsr bx,al; bx:=6, т.к. 6й бит регистра al=1

Если операнд_2 равен 0 то вышеописанные две команды устанавливают флаг нуля zf в 1, иначе в 0.



Поделиться:


Последнее изменение этой страницы: 2021-01-08; просмотров: 685; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.182.179 (0.007 с.)