
- •Лекция №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].
Лабораторная работа №12. Тема: Графические видеорежимы. Работа с vga-режимами
Пример №1. Разработать программу, которая переводит экран в графический режим 13h (320x200) и заселяет его точками случайным образом, после чего эти точки эволюционируют согласно законам алгоритма «Жизнь»: если у точки меньше двух или больше трех соседей, она погибает, а если у пустой позиции есть три соседа, в ней появляется новая точка.
masm
model small
.stack 100h
.code
.186
start:
mov AX,@data
mov DS,AX
; заполнение массива ячеек псевдослучайными значениями
xor ax,ax
int 1Ah ; Функция АН = 0 INT 1Ah: получить текущее время DX теперь содержит
; число секунд, прошедших с момента включения компьютера,
; которое используется как начальное значение генератора случайных чисел
mov di,320*200+1 ; максимальный номер ячейки
fill_buffer:
imul dx,4E35h ; простой генератор случайных чисел
inc dx ; из двух команд
mov ax,dx ; текущее случайное число копируется в АХ,
shr ax,15 ; от него оставляется только один бит,
mov byte ptr [di],al ; и в массив копируется 00, если ячейка пуста, и 01, если заселена
dec di ; следующая ячейка
jnz fill_buffer ; продолжить цикл, если DI не стал равен нулю
mov ax,0013h ; графический режим 320x200, 256 цветов
int 10h
; основной цикл
new_cycle:
; Шаг 1: для каждой ячейки вычисляется число соседей и записывается в старшие 4 бита
; этой ячейки
mov di,320*200+1 ; максимальный номер ячейки
step_1:
mov al,byte ptr [di+1] ; в AL вычисляется сумма
add al,byte ptr [di-1] ; значений восьми соседних ячеек,
add al,byte ptr [di+319] ; при этом в младших четырех
add al,byte ptr [di-319] ; битах накапливается число
add al,byte ptr [di+320] ; соседей
add al,byte ptr [di-320]
add al,byte ptr [di+321]
add al,byte ptr [di-321]
shl al,4 ; теперь старшие четыре бита AL – число соседей текущей
; ячейки
or byte ptr [di],al ; поместить их в старшие четыре бита текущей ячейки
dec di ; следующая ячейка
jnz step_1 ; продолжить цикл, если DI не стал равен нулю
; Шаг 2: изменение состояния ячеек в соответствии с полученными в шаге 1
; значениями числа соседей
mov di,320*200+1 ; максимальный номер ячейки
flip_cycle:
mov al,byte ptr [di] ; считать ячейку из массива
shr al,4 ; AL = число соседей
cmp al,3 ; если число соседей = 3,
je birth ; ячейка заселяется,
cmp al,2 ; если число соседей = 2,
je f_c_continue ; ячейка не изменяется,
mov byte ptr [di],0 ; иначе - ячейка погибает
jmp short f_c_continue
birth:
mov byte ptr [di],1
f_c_continue:
and byte ptr [di],0Fh ; обнулить число соседей в старших битах ячейки
dec di ; следующая ячейка
jnz flip_cycle
;
; Вывод массива на экран средствами BIOS
;
mov si,320*200+1 ; максимальный номер ячейки
mov cx,319 ; максимальный номер столбца
mov dx,199 ; максимальный номер строки
zdisplay:
mov al,byte ptr [si] ; цвет точки (00 - черный, 01 - синий)
mov ah,0Ch ; номер видеофункции в АН
int 10h ; вывести точку на экран
dec si ; следующая ячейка
dec cx ; следующий номер столбца
jns zdisplay ; если столбцы не закончились - продолжить,
mov cx,319 ; иначе: снова максимальный номер столбца в СХ
dec dx ; и следующий номер строки в DX,
jns zdisplay ; если и строки закончились - выход из цикла
mov ah,1 ; если не нажата клавиша
int 16h
jz new_cycle ; следующий шаг жизни
mov ax,0003h ; восстановить текстовый режим
int 10h
mov ax,4C00h ; и завершить программу
int 21h
.fardata? ; сегмент дальних неинициализированных данных
db 320*200+1 dup(?) ; содержит массив ячеек
end start
Задание для самостоятельной работы:
Разработать программу, которая переводит экран в графический режим 13h (320x200) и заселяет его точками случайным образом, после чего эти точки эволюционируют согласно законам алгоритма «Жизнь»: если у точки меньше двух или больше трех соседей, она погибает, а если у пустой позиции есть три соседа, в ней появляется новая точка. При этом, так как для хранения информации о каждой ячейке используется один байт, то осуществить вывод данных на экран в режиме 13h, выполнив простое копирование.
;Изобразить в правом верхнем углу экрана окно с синим крестом на белом фоне.
;По нажатию клавиши F1 последовательно копировать его в левое верхнее,левое
;нижнее и правое нижнее окно экрана.По клавише Е все стирать, по клавише R на-
;чинать заново(использовать режим 1 видео-вывода)
model small
.stack 100h
.data
;-------------------------------------
color db 7
color1 db 1
flag db 0
er db 0
;-------------------------------------
ports macro prt,nreg,val ;
mov dx,prt
mov al,nreg
out dx,al
inc dx
mov al,val
out dx,al
endm
;--------------------------------------
.code
Start: mov ax,@data
mov ds,ax
mov ax,0a000h;Для графического режима
mov es,ax
mov AH,0 ;Режим 640Х480
MOV AL,12H ;
INT 10H ;
main: call draw
mov ah,00h ;Чтение символа с ожиданием
int 16h
cmp al,1bh ;ESC-Exit
jne m0
cmp ah,01h
je exit
m0: cmp ah,3bh ;F1-Copy
jne m1
add flag,1;изменение содержимого флага на 1
call fcopy
m1: cmp al,45H ;E-ERASE
jne m2
call erase
mov er,1 ;установка флага в 1
m2: cmp al,52H ;R-Restart
jne m3
mov flag,0 ;обнуление флагов
mov er,0 ;
m3: jmp main
exit: mov ax,4c00h
int 21h
;-------------------Очистка экрана--------------------------------
erase proc
mov bx,0
xor si,si
mov cx,480*80
beg1: ports 3c4h,2,0fh
ports 3ceh,8,0ffh
mov byte ptr es:[bx][si],0
inc si
cmp si,80
jb lp
add bx,80
xor si,si
lp: loop beg1
ret
erase endp
;----------------------Быстрое копирование--------------------------
fcopy proc
;-----------------------------------------------------------
cmp flag,1 ;Левое верхнее положение
jne k1
mov bp,0 ;координата
jmp kop
;-----------------------------------------------------------
k1: cmp flag,2 ;Левое нижнее положение
jne k2
mov bp,420*80 ;координата
jmp kop
;-----------------------------------------------------------
k2: cmp flag,3 ;Правое нижнее положение
je kop1
ret
kop1: mov bp,420*80+64 ;координата
kop: ports 3ceh,5,1 ;установка режима быстрого копирования(1 режим)
mov bx,64 ;установка начальной координаты копируемого обьекта
mov cx,60*16 ;16 байт длина Х 60 пикселей
beg3: mov al,es:[bx][si]
mov es:[bp][si],al
inc si
cmp si,16
jb lp3
xor si,si
add bx,80
add bp,80
lp3: loop beg3
ports 3ceh,5,2 ;установка режима быстрого закрашивания(2 режим) необходимо для выполнения процедуры draw
ret
fcopy endp
draw Proc
cmp er,1 ;Если была нажата кнопка E - очистка,то ничего не рисовать, сразу выход из процедуры
jne mt1
ret
mt1: cmp flag,0 ;Если не было нажато клавиши F1,то прорисовка ;картинки в правом верхнем углу экрана
je mt2
ret
mt2: mov bx,64
xor si,si
mov cx,60*16
ports 3c4h,2,0fh
ports 3ceh,8,0ffh
mov byte ptr es:[bx][si],0
begin:
;--------Синия вертикальная полоска------------
cmp si,8;сравниваем с серединой белого флага по горизонтали
jne met1
ports 3c4h,2,color1
mov byte ptr es:[bx][si],0ffh
inc si
jmp lp1
;--------Синия горизонтальная полоска----------
met1:
cmp bx,64+80*25;сравниваем с серединой белого флага по ;вертикали
jne met2
push cx
mov cx,8*16
beg: ports 3c4h,2,color1
mov byte ptr es:[bx][si],0ffh
inc si
cmp si,16
jb lp2
add bx,80
xor si,si
lp2: loop beg
pop cx
sub cx,8*16
met2: ;---------Белый фон----------------------------
ports 3c4h,2,color
mov byte ptr es:[bx][si],0ffh
inc si
cmp si,16
jb lp1
add bx,80
xor si,si
lp1: loop begin
ret
draw endp
end Start
Вариант 2
;Вариант №6. Изобразить на экране синюю решетку толщиной 2 пикселя.
;По нажатию клавиши ALT/E последовательно менять фон за решеткой по
;правилу белый-желтый-красный.
.model small
.stack 100h
.data
;-------------------------------------
shag dw 0
color db 1
cvet db 8
;-------------------------------------
ports macro prt,nreg,val ;
mov dx,prt
mov al,nreg
out dx,al
inc dx
mov al,val
out dx,al
endm
;--------------------------------------
.code
Start: mov ax,@data
mov ds,ax
mov ax,0a000h ;Для графического режима
mov es,ax
mov AH,0
MOV AL,12H
INT 10H
main: call draw
mov ah,00h
int 16h
cmp al,1bh
je exit
cmp ah,12h
je fon1
jmp main
fon1: call fon
jmp main
exit: mov ax,4c00h
int 21h
;--------------------------------------------------------------
fon proc
;-------------FON--------------------------------------
cmp cvet,6
jne p2
dec cvet
p2: cmp cvet,4
jne p1
mov cvet,8
p1: dec cvet
mov AH, 10h
mov AL, 0
mov BL, 0 ; nomer cvetovogo registra. 0 - cvet fona
mov BH, cvet ; RGB kod zanosimyj v cvetovoj registr
int 10h
ret
fon endp
;--------------------------------------------------------------
draw Proc
;-------------RESHETKA---------------------------------
mov bx,0
mov shag,80*5
xor si,si
mov cx,480*80
ports 3c4h,2,0fh
ports 3ceh,8,0ffh
mov byte ptr es:[bx][si],0
ports 3c4h,2,color
begin: cmp bx,shag
jne met1
add shag,80*7
;----------Gorizontalinie linii----------
push cx
mov cx,80*2
beg: mov byte ptr es:[bx][si],0ffh
inc si
cmp si,80
jb lp
add bx,80
xor si,si
lp: loop beg
pop cx
sub cx,2
jmp begin
;-----------Vertikalinii linii-----------
met1: mov byte ptr es:[bx][si],081h
inc si
cmp si,80
jb lp1
add bx,80
xor si,si
lp1: loop begin
;--------------------------------------------
ret
draw endp
;----------------------------------------------------
end Start