- •Лекция №1. Основные понятия. Первая программа для dos и под Windows. Представление данных в компьютере.
- •Сам ассемблер — программа, которая переводит текст с языка, понятного человеку, в язык, понятный процессору, получает объектный модуль;
- •Компоновщик (linker), который создает исполнимые файлы из одного или нескольких объектных модулей, полученных после запуска ассемблера;
- •Дополнительные вспомогательные программы — компиляторы ресурсов, расширители dos и тому подобное (см. Табл.).
- •Написать её в блокноте, сохранять в *.Asm файл;
- •Из командной строки вызвать ассемблер tasm32.Exe (tasm.Exe);
- •Из командной строки вызвать линковщик tlink32.Exe (tlink.Exe);
- •Процессоры и их регистры
- •Процессоры x86
- •Регистры процессора
- •Описание регистров
- •Задача: найти старшую часть расширенного регистра (eax, ebx, ..., esi, edi)?
- •0030:4012 (Всё шестнадцатиричное)
- •4) Нельзя использовать сегментный регистр cs в качестве операнда назначения.
- •5) Оператор ptr можно применять и когда требуется принудительно поменять размерность операндов. К примеру, требуется переслать значение 0ffh во второй байт поля flp:
- •Xchg eax,ebx ; обменять содержимое регистров eax и ebx.
- •Xchg al,al ; а эта команда не делает ничего
- •Xchg ax, word ptr [si] ; обменять содержимое регистра ах и слова в памяти по адресу в [si].
- •Технология sse. Блок xmm
- •Имеются специальные команды сравнения двух вещественных чисел. После их выполнения формируются и помещаются в eflags признаки, характеризующие результат операции.
- •8 Флагов состояния. Эти флаги могут изменяться после выполнения машинных команд;
- •1) Первой известной кодировкой символов была кодировка ascii, и она используется до сих пор. В ascii-кодировке каждый символ занимает 8 бит, или один байт.
- •2. Адресные операнды – задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещения. К примеру:
- •6. Структурные операнды используются для доступа к конкретному элементу структуры.
- •7. Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой записи.
- •Команды безусловной передачи управления:
- •Команды условной передачи управления:
- •Команды управления циклом:
- •Лекция № 4. Условные переходы. Арифметиченские команды. Bcd числа.
- •1111111011101101 Инвертируем 0000000100010010
- •Лекция №5. Арифметические команды над целыми числами (продолжение). Арифметические операции над двоично-десятичными числами (bcd числами)
- •К содержимому младшей тетрады al прибавляется 6;
- •Флаг cf устанавливается в 1, тем самым фиксируется перенос в старший разряд для того, чтобы его можно было учесть в последующих действиях.
- •Из содержимого младшей тетрады регистра al вычитается 6;
- •Обнуляется старшая тетраду регистра al;
- •Устанавливает флаг cf в 1, фиксируя воображаемый заём из старшего разряда.
- •Делит ax на 10;
- •Результат деления записывается так: частное – в ah, остаток в al.
- •1) Преобразует двузначное неупакованное bcd-число в регистре ах в двоичное число;
- •2) Полученное двоичное число используется в качестве делимого в операции деления;
- •3) Полученное двоичное число помещается в регистр aх.
- •Деление с остатком
- •Блок-схема вывода результата при делении с остатком Числа с плавающей запятой. Работа с сопроцессором
- •Число имеет вид 1,1100011 × 2-1 или 0,11100011.
- •Переводом в десятичную систему счисления получаем 0,88671875. Лекция №6. Работа с сопроцессором. Команды для работы с fpu. Работа с fpu.
- •Блок-схема вывода на экран вещественного числа, которое хранится в регистре st(0) сопроцессора.
- •Деление с остатком, используя команды целочисленного деления
- •Блок-схема вывода результата при делении с остатком Трансцендентные операции fpu
- •Массивы
- •Перечислением элементов массива в поле операндов одной из директив описания данных. Например:
- •Используя оператор повторения dup. К примеру:
- •4) Mov esi,6*2 ; 2 байта – размер элементов
- •Индексная адресация со смещением — режим адресации, при котором полный адрес формируется из двух компонентов:
- •Базовая индексная адресация со смещением — режим адресации, при котором полный адрес формируется максимум из трех компонентов:
- •Структуры
- •Организовать обращение к элементам структуры.
- •Цепочечные команды или команды обработки строк символов
- •Организация обращения к элементам записи.
- •Iotest record
- •Работа с записями
- •1) Для выделения элемента записи необходимо:
- •2) Чтобы поместить измененный элемент на его место в запись необходимо:
- •3. В конце работы файл следует закрыть.
- •4. Признаком ошибки при выполнении функции dos является взведенный флаг с (переноса).
- •2. Создание файла с усечением существующего до нулевой длины.
- •LpFileName — указатель на asciiz-строку с именем (путем) открываемого или создаваемого файла;
- •DwDesiredAccess — тип доступа к файлу:
- •4) Mov esi,6*2 ; 2 байта – размер элементов
- •Индексная адресация со смещением — режим адресации, при котором полный адрес формируется из двух компонентов:
- •Базовая индексная адресация со смещением — режим адресации, при котором полный адрес формируется максимум из трех компонентов:
- •Структуры
- •Организовать обращение к элементам структуры.
- •Цепочечные команды или команды обработки строк символов
- •Организация обращения к элементам записи.
- •Iotest record
- •Работа с записями
- •1) Для выделения элемента записи необходимо:
- •2) Чтобы поместить измененный элемент на его место в запись необходимо:
- •3. В конце работы файл следует закрыть.
- •4. Признаком ошибки при выполнении функции dos является взведенный флаг с (переноса).
- •2. Создание файла с усечением существующего до нулевой длины.
- •LpFileName — указатель на asciiz-строку с именем (путем) открываемого или создаваемого файла;
- •DwDesiredAccess — тип доступа к файлу:
- •3) Создать и открыть новый файл
- •4) Чтение из файла или устройства
- •5) Переместить указатель чтения/записи
- •1) HFile – хэндл того файла, в котором перемещается указатель.
- •7) Запись в файл или устройство
- •8) Закрыть файл
- •9) Удаление файла
- •Функция 01h – ожидание ввода символа с эхопечатью
- •Функция 0ah – получение строки символов
- •1) Создать каталог
- •2) Удалить каталог
- •5) Определить текущий каталог
- •Перечень функций прерывания 21h, работающих с файлами, которые имеют длинные имена и соответствующие функции api Win32.
- •Перечислим функции api Win32, имеющие отношение к работе с файловой системой.
- •1) В Win32 получить время создания, время последнего доступа и время последней модификации файла можно с помощью функции GetFileTime.
- •3) В Win32 имеется функция GetFileInformationByHandle, с помощью которой можно получить все атрибуты файла:
- •Int 10h ; вызов прерывания bios
- •Основные графические режимы vga
- •Int 10h ; считываем символ и его атрибут
- •Стандартные цветовые палитры в режимах 4,5,6.
- •02H/03h - Чтение/запись секторов.
- •Прямое программирование видеобуфера в текстовом режиме
- •Лекция №6. Работа с сопроцессором. Команды для работы с fpu. Работа с fpu.
- •Лабораторная работа №12. Тема: Графические видеорежимы. Работа с vga-режимами
- •Лабораторная работа № 8. Тема: Работа с файлами
- •Лабораторная работа №5. Тема: Работа с массивами
- •Лекция №1. Основные понятия. Первая программа для dos и под Windows. Представление данных в компьютере.
- •Сам ассемблер — программа, которая переводит текст с языка, понятного человеку, в язык, понятный процессору, получает объектный модуль;
- •Компоновщик (linker), который создает исполнимые файлы из одного или нескольких объектных модулей, полученных после запуска ассемблера;
- •Дополнительные вспомогательные программы — компиляторы ресурсов, расширители dos и тому подобное (см. Табл.).
- •Написать её в блокноте, сохранять в *.Asm файл;
- •Из командной строки вызвать ассемблер tasm32.Exe (tasm.Exe);
- •Из командной строки вызвать линковщик tlink32.Exe (tlink.Exe);
- •Процессоры и их регистры
- •Процессоры x86
- •Регистры процессора
- •Описание регистров
- •Задача: найти старшую часть расширенного регистра (eax, ebx, ..., esi, edi)?
- •0030:4012 (Всё шестнадцатиричное)
- •4) Нельзя использовать сегментный регистр cs в качестве операнда назначения.
- •5) Оператор ptr можно применять и когда требуется принудительно поменять размерность операндов. К примеру, требуется переслать значение 0ffh во второй байт поля flp:
- •Xchg eax,ebx ; обменять содержимое регистров eax и ebx.
- •Xchg al,al ; а эта команда не делает ничего
- •Xchg ax, word ptr [si] ; обменять содержимое регистра ах и слова в памяти по адресу в [si].
- •Технология sse. Блок xmm
- •Имеются специальные команды сравнения двух вещественных чисел. После их выполнения формируются и помещаются в eflags признаки, характеризующие результат операции.
- •8 Флагов состояния. Эти флаги могут изменяться после выполнения машинных команд;
- •1) Первой известной кодировкой символов была кодировка ascii, и она используется до сих пор. В ascii-кодировке каждый символ занимает 8 бит, или один байт.
- •2. Адресные операнды – задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещения. К примеру:
- •5. Структурные операнды используются для доступа к конкретному элементу структуры.
- •6. Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой записи.
- •Команды безусловной передачи управления:
- •Команды условной передачи управления:
- •Команды управления циклом:
- •От типа операнда в команде безусловного перехода (ближний или дальний);
- •Лабораторная работа №1. Тема: знакомство с системой программирования Турбо-ассемблер.
- •1) Пересылка данных
- •2) Xor логическое исключающее или
- •3) Команды передачи управления
- •Задание для самостоятельной работы
- •Лабораторная работа №1. Тема: знакомство с системой программирования Турбо-ассемблер.
- •1) Пересылка данных
- •2) Xor логическое исключающее или
- •3) Команды передачи управления
- •Команды вычитания.
- •Команды умножения.
- •Команда деления
- •Команды преобразования
- •Команды сдвига
- •Задание для самостоятельной работы.
- •Лабораторная работа №4. Тема: перевод чисел из шестнадцатиричной системы исчисления в десятичную и в двоичную.
- •Задание для самостоятельной работы.
- •Лекция №10. Сложные структуры данных. Массивы. Структуры.
- •4) Mov esi,6*2 ; 2 байта – размер элементов
- •Индексная адресация со смещением — режим адресации, при котором полный адрес формируется из двух компонентов:
- •Базовая индексная адресация со смещением — режим адресации, при котором полный адрес формируется максимум из трех компонентов:
- •Структуры
- •Организовать обращение к элементам структуры.
- •Цепочечные команды или команды обработки строк символов
- •Организация обращения к элементам записи.
- •Iotest record
- •Работа с записями
- •1) Для выделения элемента записи необходимо:
- •2) Чтобы поместить измененный элемент на его место в запись необходимо:
- •3. В конце работы файл следует закрыть.
- •4. Признаком ошибки при выполнении функции dos является взведенный флаг с (переноса).
- •2. Создание файла с усечением существующего до нулевой длины.
- •LpFileName — указатель на asciiz-строку с именем (путем) открываемого или создаваемого файла;
- •DwDesiredAccess — тип доступа к файлу:
- •Лекция №6. Работа с сопроцессором. Команды для работы с fpu. Работа с fpu.
- •Лекция №6. Работа с сопроцессором. Команды для работы с fpu. Работа с fpu.
- •Лекция №6. Работа с сопроцессором. Команды для работы с fpu. Работа с fpu.
- •Лабораторная работа №1. Тема: знакомство с системой программирования Турбо-ассемблер.
- •1) Пересылка данных
- •2) Xor логическое исключающее или
- •3) Команды передачи управления
- •Лабораторная работа №2. Тема: Работа с арифметическими командами.
- •Команды сложения
- •Команды вычитания.
- •Команды умножения.
- •Команда деления
- •Команды преобразования
- •Команды сдвига
- •Лабораторная работа №4. Тема: перевод чисел из шестнадцатиричной системы исчисления в десятичную и в двоичную.
- •Директива extrn Режимы Ideal, masm
- •Преимущества и недостатки ]Преимущества
- •Недостатки
- •Блок-схема вывода на экран вещественного числа, которое хранится в регистре st(0) сопроцессора.
- •Трансцендентные операции fpu
- •Функция MessageBox
- •1) Первой известной кодировкой символов была кодировка ascii, и она используется до сих пор. В ascii-кодировке каждый символ занимает 8 бит, или один байт.
- •2.Адресные операнды – задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещения. К примеру:
- •5. Структурные операнды используются для доступа к конкретному элементу структуры.
- •6. Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой записи.
- •4) Нельзя использовать сегментный регистр cs в качестве операнда назначения.
- •5) Оператор ptr можно применять и когда требуется принудительно поменять размерность операндов. К примеру, требуется переслать значение 0ffh во второй байт поля flp:
- •Xchg eax,ebx ; обменять содержимое регистров eax и ebx.
- •Xchg al,al ; а эта команда не делает ничего
- •Xchg ax, word ptr [si] ; обменять содержимое регистра ах и слова в памяти по адресу в [si].
Int 10h ; считываем символ и его атрибут
mov char,al ; сохраняем полученный ASCII-код символа
mov attr,ah ; и его атрибут
...
На входе: AH = 09h - запись символа с атрибутом;
AL = ASCII-код записываемого символа;
BH = номер страницы видеопамяти;
BL = атрибут (для текстового режма) или
цвет (для графического режима);
CX = число записываемых символов.
На выходе: Не используются.
0Ah - Записать символ.
Запись символа в видеопамять без задания для него индивидуального значения атрибута. Используется текущий атрибут. Можно задавать кратность записи.
Записывает символ ASCII кода в текущую позицию курсора. После вывода курсор следует сместить к следующей позиции функцией 02h.
На входе: AH = 10h - запись символа без атрибута;
AL = ASCII-код записываемого символа;
BH = номер страницы видеопамяти;
BL = цвет (для графического режима);
CX = число записываемых символов.
На выходе: Не используются.
mov AH, 0ah
mov AL, ‘a’ ; выводимый символ (или его порядковый
; номер в таблице)
mov BH, 0 ;установка видеостраницы
mov CX, 1 ;коэффициент повторения
int 10h
0Bh - Выбрать цветовую палитру.
Эта функция позволяет управлять цветом рамки вокруг изображения в текстовом режиме и цветом фона в графическом режиме. Данная функция позволяет выбрать одну из двух стандартных цветовых палитр.
Стандартные цветовые палитры в режимах 4,5,6.
Номер цвета |
Палитра 0 |
Палитра 1 |
0 |
цвет фона |
цвет фона |
1 |
зеленый |
синий |
2 |
красный |
малиновый |
3 |
коричневый |
белый |
Функция 0Bh имеет следующий формат вызова:
На входе: AH = 0Bh - установка цветовой палитры;
BH = 0, тогда
BL = цвет фона и рамки (для графического
режима) или цвет рамки (для текстового
режима)
BH = 1, тогда
BL = номер палитры (0 или 1).
На выходе: Не используются.
0Ch, 0Dh - Записать/прочитать графическую точку.
Можно установить точку заданного цвета в заданном месте экрана для выбранной дисплейной страницы или прочитать значение цвета любой точки на экране соответственно.
При вызове:
AH=0Ch
АL=цвет (номер цветового регистра)
ВН=страница
СХ=графический столбец
ВХ=графическая строка
Функция 0Dh читает из видеобуфера цвет пиксела в заданной графической позиции.
При вызове:
AH=0Dh
ВН=страница
СХ=графический столбец
ВХ=графическая строка
При возврате: АL=номер цвета пиксела.
Пример: определим номер цвета пиксела, имеющего координаты x_pos и y_pos:
mov ah,0Dh
mov cx,x_pos
mov dx,y_pos
int 10h
; сохраняем полученную величину
mov color_number,al
0Eh - Запись символа на экран в стиле TTY.
После записи символа на экран курсор продвигается на следующую позицию, при этом обрабатываются такие управляющие символы, как BEL (подача звукового сигнала), возврат на одну позицию, перевод строки, возврат к началу строки.
0Fh - Прочитать текущий видеорежим.
Если необходимо изменить видеорежим, то можно сохранить старый видеорежим, получив его с помощью этой функции.
Кроме того, функция возвращает количество столбцов на экране и номер текущей активной дисплейной страницы.
На входе: AH = 0Fh - определение текущего режима
видеоадаптера.
На выходе: AH = число символов в строке;
AL = номер текущего режима;
BH = номер активной страницы видеопамяти.
___________________________________________________
Пример 2. Программа выводит на экран синусоиду в режиме 13h.
; Рисуем синусоиду в графическом режиме 13h
; также рисуем координатные оси
; синус определяем как sin(z)=((2*tan(z))/(1+tan(z)*tan(z)))
masm
model small
.stack 100h
.data
B Dd 0
Y dd ?
X dw ?
B1 dd 0
D1 dd 2.0
MASSHTAB dd 10.0
saveMode db ? ; Сохранить текущий видео режим
currentX dw 100 ; координата X
currentY dw 0 ; координата Y
color db 1 ; номер цвета
step dd 0.1
.code
start:
mov ax,@data
mov ds,ax
; Получаем и сохраняем текущий видеорежим
mov ah,0Fh
int 10h
mov saveMode,al
; Переключиться в графический режим
mov ah,0h
mov al,13h
int 10h
finit
FLD B1
mov cx,220; ; счетчик цикла
L1:
FPTAN
FLD ST(1)
FLD ST(0)
FMUL
FADD
FLD ST(0)
FLD ST(2)
FLD D1
FMUL
FLD ST(1)
FDIV
FLD MASSHTAB
FMUL
FLD ST(0)
FRNDINT
fist Y
mov ax,word ptr[Y]
mov bx,100
sub bx,ax
mov dx,bx ; в dx записываем точку Y
push cx
mov ah,0Ch ; рисование точки
mov al,color ; цвет точки
mov bh,0 ; видео страница
mov cx,currentX ; в cx записываем точку X
int 10h
inc currentX
inc color ; используйте для разноцветной линии
pop cx
finit
fld B
FLD step
fadd
fst B
loop L1
;Рисуем координатную ось OX
mov cx,320
L2:
mov dx,100 ; в dx записываем точку Y
push cx
mov ah,0Ch ; рисование точки
mov al,3 ; цвет точки
mov bh,0 ; видео страница
mov cx,currentX ; в cx записываем точку X
int 10h
inc currentX
pop cx
loop L2
;--------------------------------------------------------
;Рисуем координатную ось OY
mov cx,200
L3:
push cx
mov cx,100 ; в cx записываем точку X
mov ah,0Ch ; рисование точки
mov al,3 ; цвет точки
mov bh,0 ; видео страница
mov dx,currentY ; в dx записываем точку Y
int 10h
inc currentY
pop cx
loop L3
;--------------------------------------------------------
; Ожидаем нажатия клавиши
mov ah,0
int 16h
; Возврат в прежний видеорежим
mov ah,0 ; установить видео режим
mov al,saveMode ; сохраненный видео режим
int 10h
exit: ;выход
mov ax,4c00h ;стандартное завершение программы
int 21h
end start
_________________________________________________
Пример: Написать программу вывода на экран монитора четырех смежных квадратов в шахматном порядке: два синих два желтых.
masm
model small
.stack 100h
.data
.code
start: ;точка входа
mov ax,@data
mov ds,ax
mov ax,0002h ;установка видеорежима с номером в AL
int 10h ;прерывание BIOS
mov ax,0600h ;прокрутка вверх (AL=0 - заполняет экран
;пробелами)
mov bh,01100000b ;устанавливает цвет фона(желтый) и
;символа
mov cx,0000h ;координаты верхнего левого угла
;(строка, столбец)
mov dx,0306h ;координаты нижнего правого угла
int 10h
mov bh,00010000b ;синий
mov cx,0007h
mov dx,030Dh
int 10h
mov cx,0400h
mov dx,0706h
int 10h
mov bh,01100000b ;желтый
mov cx,0407h
mov dx,070Dh
int 10h
mov ax,4c00h ;стандартное завершение программы
int 21h
end start
Обслуживание клавиатуры.
Обработчик прерывания INT 16h выполняет несколько функций, связанных с обслуживанием клавиатуры.
Вход:
AH=00H – читать (ожидать) следующую нажатую клавишу
Выход: AL = ASCII символ (если AL=0, AH содержит
расширенный код ASCII )
AH = сканкод или расширенный код ASCII
Вход:
AH=01H проверить готовность символа (и показать его, если
так)
Выход: ZF = 1 если символ не готов.
ZF = 0 если символ готов.
AX = как для подфункции 00H (но символ здесь не
удаляется из очереди).
Вход:
AH=02H читать состояние shift-клавиш. определить, какие
shift-клавиши нажаты в данный момент, находится
ли клавиатура в состоянии NumLock, и т.п.
Выход: AL = статус клавиатуры
Обслуживание дисковой подсистемы.
Прерывание BIOS INT 13h предназначено для обслуживания жестких и флоппи-дисков. Многочисленные функции прерывания INT 13h выполняют все операции по вводу/выводу на диски.
00h - Сброс дисковой системы.
Эта функция выполняет установку в исходное состояние всей дисковой системы или выбранного дискового устройства. Используется обычно перед началом работы с устройством.
01h - Получить состояние дисковой системы.
Эта функция позволяет проверить результат выполнения предыдущей операции. Если операция завершилась аварийно, при помощи этой функции можно определить код ошибки.