Мегаобучалка Главная | О нас | Обратная связь


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



2019-12-29 197 Обсуждений (0)
Некоторые функции DOS ( int 21 h ) 0.00 из 5.00 0 оценок




Назначение Номер функции Вход Выход
Ввод символа с ожиданием и эхосопровождением 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             ;вводим символ с клавиатуры;символ введенный с клавиатуры находится в регистре almov    ax ,4 c 00 h int       21 h ;выход из программы

End start

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

model small . stack 100 h .dataf 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 .dataf 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 .datax1      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.



2019-12-29 197 Обсуждений (0)
Некоторые функции DOS ( int 21 h ) 0.00 из 5.00 0 оценок









Обсуждение в статье: Некоторые функции DOS ( int 21 h )

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (197)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)