Общий формат команды Ассемблера
Общий формат команды Ассемблера
[Метка:] Код_операции [Операнд1 [,Операнд2] ] [;Комментарий ]
Адреса памяти в командах м.б. записаны так:
· А
· А[М]
· А[М1] [М2]
Где А – адрес, М – регистр ВХ, ВР, M2 - регистр SI или DI. В случае 2 и 3 компонента А может отсутствовать (т.е. А=0).
Примеры:
Mov Ax, Si
Mov Bh, 5
Mov Di, Size X
Mov X, Ah
Mov X[Bx][Di], 5
Mov [Bx], Cl
Mov Ah, 5
Mov Ax, 5
Mov [Bx], 300
Mov Ds, Ax
Mov Cx, Bh
Mov Dl, 300
Mov [Bx], 5 - Не Определён Тип Операнда
Mov Byte Ptr [Bx], 5
Mov Word Ptr [Bx], 5
X Dw 999
Mov Ah, X
Mov Ah, Byte Ptr X
Mov Ax, 80h
Mov Ax, -128 ;0ff80h
Mov Ax, 128 ;0080h
Mov Ax, 80h ;0080h
Структура простейшего программного модуля. Сегментирование
Модуль программы на языке ассемблера состоит из сегментов следующих типов:
- сегмент кода
- сегмент данных
- сегмент стека
- расширенный сегмент
Assume CS: Code, DS: Data
Code SEGMENT
org 100h
Start: … ;точка входа в программу
Code ENDS
Data Segment
….
Data ENDS
END Start
Dt1 Segment
A Db 0
B Dw ?
Dt1 Ends
;
Dt2 Segment
C Db ‘Hallo’
Dt2 Ends
;
Code Segment
Assume Cs:Code, Ds:Dt1, Es:Dt2
Beg: Mov Ax, Dt2
Mov Ds,Ax
Mov Bh, C
…
Code Ends
End Beg
В простейшей программе может быть всего один сегмент - кодовый, тогда необходимо в директиве Assume указать его использование и для адресации данных, а также загрузить в регистр ds его фактический адрес.
Assume CS: Code, DS: Code
Code SEGMENT
org 100h
Start: mov ax,cs
mov ds,ax
…
Функции BIOS
Функции BIOS – это функции, вызываемые по команде INT с номерами в диапазоне от 0 до 20h для обработки различных событий в ЭВМ. Детализация вызываемого сервиса обычно вводится в регистре АН.
Int 10H: Видео сервис
Ниже приведен перечень функций видеосервиса, предоставляемых подпрограммами BIOS. Номер функции определяется значением регистра ah при вызове int 10.
Функция | |
00h | Установить видеорежим |
01h | Установить размер и форму курсора |
02h | Установить позицию курсора |
03h | Читать позицию курсора |
04h | Читать световое перо |
05h | Выбрать активную страницу дисплея |
06h | Скроллинг окна вверх (или очистка его) |
07h | Скроллинг окна вниз (или очистка его) |
08h | Читать символ/атрибут |
09h | Вывести символ/атрибут |
0ah | Вывести символ |
0bh | Выбрать палитру/цвет рамки |
0ch | Вывести графическую точку |
0dh | Читать графическую точку |
0fh | Вывести символ в режиме TTY |
10h | Читать видео режим |
Здесь детализированы функции INT 10H стандартного видеосервиса ROM-BIOS.
AH = 00H Установка видеорежима.
Вход: AL = видеорежим
AL | Тип | Формат | Цветов |
текст | 40 х 25 | 16/8 | |
текст | 40 х 25 | 16/8 | |
текст | 80 х 25 | 16/8 | |
текст | 80 х 25 | 16/8 | |
графика | 320 х 200 | ||
графика | 320 х 200 | ||
графика | 640 х 200 | ||
текст | 80 х 25 | ||
0dh | графика | 320 х 200 | |
0eh | графика | 640 х 200 | |
0fh | графика | 640 х 350 |
Функции OS
Функции OS - это функции, выполняемые при вызове прерывания int 21h с обозначением функции в регистре AH и подфункции (если это необходимо) в регистре AL.
Ввод-вывод текстовых данных
Функция 01h: Ввод с клавиатуры
Вход AH = 01h
Выход AL = символ, полученный из устройства стандартного ввода
Описание: Считывает (ожидает) символ со стандартного устройства ввода. Отображает этот символ на стандартное устройство вывода (эхо). При распознавании Ctrl-Break выполняется int 23h.
Замечание: Ввод расширенных клавиш ASCII (F1-F12, PgUp, курсор и т. п.) требует двух обращений к этой функции. Первый вызов возвращает AL = 0. Второй вызов возвращает в AL расширенный код ASCII.
Функция 02h: Вывод на дисплей
Вход AH = 02h
DL = символ, выводимый на устройство стандартного вывода
Описание: Посылает символ из DL на устройство стандартного вывода. Обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции. При обнаружении Ctrl-Break выполняется int 23h.
Функция 09h: Вывести строку на дисплей
Вход AH = 09h
DS:DX = адрес строки, заканчивающейся символом '$' (ASCII 24h)
Описание: Строка, исключая завершающий ее символ '$', посылается на устройство стандартного вывода. Символы Backspace обрабатываются как в функции 02h. Обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 13h и ASCII 0ah).
Завершение программы
Функция 4dh: Дать код возврата программы (WAIT)
Вход AH = 4dh
Выход AL = код возврата последнего завершившегося процесса
AH = 0 - нормальное завершение
АН = 1 - завершение через Ctrl-Break int 23h
АН = 2 - завершение по критической ошибке устройства int 24h
АН = 3 - завершение через функцию 31h KEEP
Описание: Возвращает код возврата последнего из завершившихся процессов. Эта функция возвращает правильную информацию только однажды для каждого завершившегося процесса.
Работа с файлами
Лабораторная работа 1
Лабораторная работа 2
Общий формат команды Ассемблера
[Метка:] Код_операции [Операнд1 [,Операнд2] ] [;Комментарий ]
Адреса памяти в командах м.б. записаны так:
· А
· А[М]
· А[М1] [М2]
Где А – адрес, М – регистр ВХ, ВР, M2 - регистр SI или DI. В случае 2 и 3 компонента А может отсутствовать (т.е. А=0).
Примеры:
Mov Ax, Si
Mov Bh, 5
Mov Di, Size X
Mov X, Ah
Mov X[Bx][Di], 5
Mov [Bx], Cl
Mov Ah, 5
Mov Ax, 5
Mov [Bx], 300
Mov Ds, Ax
Mov Cx, Bh
Mov Dl, 300
Mov [Bx], 5 - Не Определён Тип Операнда
Mov Byte Ptr [Bx], 5
Mov Word Ptr [Bx], 5
X Dw 999
Mov Ah, X
Mov Ah, Byte Ptr X
Mov Ax, 80h
Mov Ax, -128 ;0ff80h
Mov Ax, 128 ;0080h
Mov Ax, 80h ;0080h