Связь с администрацией сайта:       

demo

Среди толпы я одинок

Глава 15 - практика:EXE и COM программы, вывод на экран

Способы вывода на экран

Вывод информации в ассемблерных программах осуществляется обычно при помощи сервисных функций DOS (прерывание 21h). Процесс вывода состоит в следующем:

- определенные регистры микропроцессора загружаются выводимой информацией;

- в регистр AH заносится номер используемой для операции вывода функции;

- инициируется прерывание.

 

 

Ниже представлен перечень функций прерывания 21h, использующихся для вывода информации.
Функция 02h 
Вывод на дисплей.
Вход: AH=02h
DL=выводимый символ
Выход: нет
Описание: Посылает символ из DL на стандартный вывод. Обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции.
Функция 05h
Вывод на принтер.
Вход: AH=05h
DL= символ, записываемый на стандартный принтер
Выход: нет
Описание: Посылает символ в DL на стандартное устройство принтера, обычно LPT1. Команда DOS MODE может перенаправить этот вывод в последовательный порт.
Функция 09h
Выдать строку.
Вход: AH=09h
DS:DX=адрес строки, заканчивающейся символом '$' (ASCII 24H)
Выход: нет
Описание: Строка, исключая завершающий ее символ '$', посылается на стандартный вывод. Символы Backspace обрабатываются как в функции 02h. Обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 13H и ASCII 0aH). Строки, содержащие '$', можно выдать через 40h (BX=0), которая посылает символ в DL на стандартное устройство принтера, обычно LPT1.

Кроме этого прерывания есть еще функции BIOS которые вызываются прерыванием 10h
Функция 02h 
Вход. AH=02h 
BH = видео страница
DH,DL = строка, колонка (считая от 0)
Выход. Нет
Описание. Устанавливает курсор в позицию DH,DL. Установка кур-сора на строку 25 делает курсор невидимым.
Функция 09h 
Писать символ/атрибут в текущей позиции курсора.
Вход. AH=09h 
BH = номер видео страницы
AL = записываемый символ
CX = счетчик (сколько экземпляров символа записать)
BL = видео атрибут (текст) или цвет (графика)
Выход. Нет
Описание. Выводит на экран в текущую позицию курсора символ с заданным атрибутом.
Функция 0ah 
Писать символ в текущей позиции курсора.
Вход. AH=0ah 
BH = номер видео страницы
AL = записываемый символ
CX = счетчик (сколько экземпляров символа записать)
Выход. Нет
Описание. Выводит на экран в текущую позицию курсора заданный символ.
Функция 13h
Вывод строки.
Вход. AH=13h 
ES:BP – выводимая строка 
CX = длина строки (подсчитываются только символы)
DH,DL = позиция (строка, колонка) начала вывода
BH = номер страницы
AL = код подфункции:
0=атрибут в BL; курсор без изменения
1=атрибут в BL; курсор – в конец строки
2=формат строки: char,attr,...; курсор без изменения
3=формат строки: char,attr,...; курсор – в конец строки
Выход. Нет
Описание. Выдает строку в позиции курсора. Символы 0dH (CarRet), 0aH (LineFeed), 08H (backspace) и 07H (Beep) трактуются как ко-манды управления и не высвечиваются.
Некоторые функции прерывания 10h используют для вывода атрибут символа. Для адаптеров цветной графики в текстовом режиме атрибут оп-ределен следующим образом:
7 6 5 4 3 2 1 0
fgB background brt foreground
foreground – цвет переднего плана (от 0 до 0fH)
brt – интенсивность: 1=передний план яркий
background – фоновый цвет (от 0 до 7)
fgB – мерцание: 1=передний план мерцает
Вычислить значение атрибута можно, используя следующее выраже-ние:
(фон * 16) + передний план + (128 для мерцания)
Видеоадаптер поддерживает следующие цвета:

 

Примеры программ

COM программа

С учётом рассмотренной ранее теории примеры программ разобрать для вас будет не трудно!
Создайте файл prcom.asm следующего содержания (можно без коментариев):
;устанавливаем модель памяти для com программы
.model tiny
;описываем сегмент кода 
.code
;смещение обязательное для COM программ
org 100h
;стартовая метка
start:
;в dx смещение строки
mov dx,offset message
;номер функции DOS
mov ah,09h
;вызываем прерывание DOS для вывода на экран
int 21h
;завершаем com программу
ret
;описываем данные (прямо в сегменте кода)
message db 'This string is out!!!!!!',0Ah,0Dh,'$'
;метка конца программы
end start

Для компиляции с помошью пакета TASM воспользуйтесь командами (замените пути к каталогу bin своими):
c:\specprog\tasm\bin\tasm.exe prcom.asm
c:\specprog\tasm\bin\tlink.exe prcom.obj /t/x
В случае masm используйте (тут посложнее!):
ml /c prcom.asm
link prcom.obj,,NULL,,,
exe2bin prcom.exe prcom.com

 

Exe программа

Здесь я уже не стану приводить подробнх коментариев:
;модель памяти для EXE программ 
.model small
.code
start:
;загружаем явно сегм. регистр DS
mov ax,DGROUP
mov ds,ax
;выводим сообщение
mov dx,offset message
mov ah,09h
int 21h
;выводим символ 
mov dl,'!'
mov ah,02h
int 21h
;теперь явно завершаем программу 
mov ax,4C00h
int 21h
;описываем сегмент данных - отдельно от кода 
.data
message db 'This symbol is out:',0Ah,0Dh,'$'
end start

Чтобы скомпилировать используйте команды:
c:\specprog\tasm\bin\tasm.exe prexe.asm
c:\specprog\tasm\bin\tlink.exe prexe.obj /x 
На masm:
ml /c prexe.asm
link prexe.obj

Вот что должно вывестись при запуске:

 

 

Rate this item
(0 votes)
Login to post comments