- •Лекция №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].
Функция 0ah – получение строки символов
Функция 0AH прерывания 21H позволяет вводить строку длиной до 254 символов, выдавая эхо на терминал. Эта функция продолжает ввод символов до тех пор, пока не нажата клавиша "Enter". DS:DX указывает на строку, куда помещаются вводимые символы.
Вход: |
АН |
0Ah |
DS:DX |
адрес буфера |
|
Выход: |
= |
буфер содержит введенную строку |
Первый байт буфера должен содержать максимальное число символов для ввода (от 1 до 254);
Второй байт буфера будет содержать длину реально введенной строки без учета последнего символа CR (клавиша Enter);
С третьего байта записывается вводимая строка, включая последний символ CR (0Dh).
Таким образом, для получения 50 - символьной строки надо отвести под буфер минимум 53 байта памяти:
– в первый байт памяти записать число ASCII 51;
– после ввода 50 символов второй байт дескриптора будет содержать ASCII 50;
– 53-й байт отведённой памяти будет содержать ASCII 13 (0Dh).
Пример 2:
; - - - в сегменте данных
STRING DB 53 DUP(?) ; область для 50 символов
; - - - получение строки с клавиатуры
LEA DX, STRING ; DS:DX - адрес строки
MOV BX,DX
MOV AL,51 ; установка длины строки (+1 для CR)
MOV [BX], AL ; посылаем в первый байт дескриптора
; длину строки
MOV AH, 0AH ; номер функции
INT 21H
; - - - получаем в AH длину строки
MOV AH, [BX]+1 ; теперь реальная длина в AH
Пример 3:
; Программа считывает строку символов и выводит ее на экран.
;------------------------------------------------------------------------
masm
model small
.stack 100h
.data
crlf DB 0Dh, 0Ah, '$' ; символы перехода на начало новой строки
buf DB 6 ; выделяем буфер для ПЯТИ видимых символов
.code
start:
mov ax,@data
mov ds,ax
MOV DX,offset buf ;DX = адрес буфера
MOV AH,0Ah ;AH = номер функции 0Аh
INT 21h ;вызов функции 0Ah
;Если введенную с клавиатуры строку необходимо вывести на экран, то в
;конец строки нужно записать символ $. Для этого нужно получить адрес
;буфера, узнать длину реально введенной строки и прибавить к полученному
;значению 2, т.к. первые 2 байта содержат служебную информацию. Это
;значение будет адресом байта, который следует за последним символом
;строки. В этот адрес и записывается символ $
MOV DХ,offset buf ; DХ = адрес буфера
MOV BX,0h ; ВХ = 0
MOV BL,[DХ+1] ; BL = длинa строки
MOV BYTE PTR [DХ+BX+2], '$' ; DХ+BX+2 - адрес, который следует
;за последним символом строки
MOV DX,offset buf ; DX = адрес буфера
ADD DX,2h ; прибавляем к DX число 2, т.к. первые
; 2 байта не содержат символов строки
MOV AH,9h ; вызываем функцию вывода строки
INT 21h
;------------------------------------------------------------------------
mov AX,4C00h
int 21h
end start
Пример 4: Эта программа выводит на экран подряд два символа "А" (латинские)
;------------------------------------------------------------------------
masm
model small
.stack 100h
.data
start:
mov ax,@data
mov ds,ax
MOV AH,2 ;АН = 2
MOV DL,'A' ;DL = 41h (код символа А)
INT 21h ;вызываем функцию DOS 02h
MOV AH,2 ;АН = 2
MOV DL,41h ;DL = 41h (код символа А)
INT 21h ;вызываем функцию DOS 02h
mov AX,4C00h
int 21h
end start
Пример 5. Программа с консоли заполняет файл my_file.txt, который находится в текущей папке. Длина строки, вводимой в файл с консоли не более 80 символов. Ввод с консоли прекращается, когда в новой строке в начале вводится «пробел». (WFile1.asm)
________________________________________________________
masm
model small
.stack 100h
buf_0ah struc
len_buf db 83 ; длина буфера buf_0ah
len_in db 0 ; количество реально введенных символов строки
buf_in db 82 dup (20h) ; буфер для ввода строки + 0dh0ah
ends
.data
handle dw 0
filename db 'my_file.txt',0
buf buf_0ah <>
.code
start:
mov ax,@data
mov ds,ax
;------------- Открываем файл
mov ah,3dh
mov al,2
mov dx,offset filename
int 21h
jc exit
mov handle,ax
;------------- Позиционируем файловый указатель на начало файла
mov ah,42h
xor al,al
xor cx,cx
xor dx,dx
mov bx,handle
int 21h
;--------------Вводим очередную строку с клавиатуры
cycl:
lea dx,buf
mov ah,0ah
int 21h
;--------------для красоты выводим на экран символ 0аh
mov dl,0ah
mov ah,2
int 21h
cmp buf.buf_in,20h
je exit
lea si,buf.buf_in
mov al,buf.len_in ; в al количество реально введённых символов
mov ah,0h
push si
add si,ax
inc si ; учитываем в len_in символ 0dh
mov byte ptr [si],0ah ; добавляем 0ah в конец введённой строки
;--------------вывод в файл
pop dx
mov bx,handle
add ax,2 ; учитываем в len_in символы 0dh0ah
mov cx,ax
mov ah,40h
int 21h
jmp cycl
exit:
xor ax,ax
mov ah,3eh
mov bx,handle
int 21h
mov AX,4C00h
int 21h
end start
Вывод на экран строки
Вход: AH=40h
BX – дескриптор файла;
СХ – Количество байт для запси;
DS:DX – указатель на область из которой записываются данные;
Пример 6: Вывести на консоль строку 'Stroka dlya vivoda na ekran funkcieu 40h'. (Vivod1.asm)
masm
model small
.stack 100h
.data
string db 'Stroka dlya vivoda na ekran funkcieu 40h',0
len_string=$-string
.code
start:
mov ax,@data
mov ds,ax
mov bx,1
mov cx,len_string
mov dx,offset string
mov ah,40h
int 21h
jc exit
jnc exit1
exit1:
xor ax,ax
mov ah,3eh
mov bx,1
int 21h
exit:
mov AX,4C00h
int 21h
end start
Самостоятельно на практике: Разработать программу, которая бы с консоли заполняла файл my_file1.txt в текущей папке. При этом, длина строки, вводимой в файл с консоли должна содержать не более 60 символов. После того как файл создан, в него консольно записана информация необходимо изменить файл, дописав в конец файла Вашу Фамилию, Имя, Отчество. Изменённый файл вывести на консоль.
Получить дату и время создания или последней модификации файла
Получить/изменить дату и время создания или модификации файла можно с помощью подфункций функции 57h.
Вход: АХ = 5700h; ВХ = дескриптор файла.
Выход: Если CF = 0: СХ = время, DX = дата.
Если CF = 1: АХ = код ошибки (CF = п. 1 — недопустимый номер подфункции в А1; 6 — недопустимый дескриптор.
Время и дата файла получаются в следующих форматах.
CX=Время |
DX=Дата |
||
Биты |
Описание |
Биты |
Описание |
15-11 |
Часы (0-23) |
15-9 |
Год |
10-5 |
Минуты |
8-5 |
Месяц |
4-0 |
Секунды |
4-0 |
День |
Установить дату и время создания или последней модификации файла
Вход: АХ = 5701h; ВХ - дескриптор файла; СХ - новое время, DX = новая дата.
Выход: Если CF = 0: СХ = время, DX = дата.
Если CF = 1 — АХ = код ошибки: 1 — недопустимый номер подфункции в Аl; 6 — недопустимый дескриптор.
Изменение характеристик файлов
Рассмотрим в качестве примера программу задания даты и времени создания файла (пример 13.4).
Пример 7. Назначение файлу даты и времени создания.
;В сегменте команд
;---------------------------Откроем файл ---------------------------------
mov AH,3Dh ; Функция открытия файла
mov AL,2
mov DX,offset fname ; Адрес имени файла
int 21h
mov handle,ax ; Получили дескриптор
;---------------Изменим дату и время создания файла ---------------
mov ah,57h ; Функция даты/времени
mov al,1 ; Установить дату/время
mov bx,handle ; Дескриптор файла
mov сх.,0 ; очистим Сх
or cx,sec ; добавим секунды cx=0000 0000 0000 0110
or cx,min ; добавим минуты cx=0000 0001 1110 0110
or cx,hour ;добавим часы cx=0110 0001 1110 0110
xor dx,dx ; очистим dx
or dx,day ; добавим день
or dx,month ;добавим месяц
or dx,year ; добавим год
int 21h
;В сегменте данных
handle dw 0 ; ячейка для дескриптора
fname db ‘MYFILE.TXT’,0 ; имя файла
sec dw 6 ; 6 секунд = 110
min dw 15*32 ; 15 минут =1111 => 001111 00110
hour dw 12*2048 ; 12 часов =1100 => 01100 001111 00110
day dw 10 ; 10 число
month dw 3*32 ; март
year dw 21*512 21 год от 1980, то есть 2001 г.
Для установки даты и времени создания файла используется функция 5701h. Она требует указания даты (в регистре DX) и времени (в регистре СХ) в том же формате, в котором эти данные хранятся в элементе каталога. Сдвиг составляющих даты/времени в соответствующие места осуществляется с помощью команд умножения на этапе трансляции. Например, для сдвига числа минут в группу битов 5... 10 число необходимо умножить на 25=32.
Переименование имеющегося файла
Для переименования имеющегося файла предусмотрена функция 56h. Она требует указания двух спецификаций файла - исходной, чтобы можно было его найти, и новой, присваиваемой файлу.
Если в обеих спецификациях указан один и тот же путь к файлу (или имеется только имя файла), осуществляется его переименование; если же пути различаются, функция выполняет перенос файла в другой каталог. Перенос файла в другой каталог не требует копирования файла на другое место диска; файл остается на том же месте, изменяются только записи об этом файле в каталогах.
Адрес исходной спецификации должен содержаться в регистрах DS:DX; адрес новой спецификации - в регистрах ES:DI.
Пример 8. Переименование файла
; В сегменте команд
push DS ; Настроим ES на
pop ES ;наш сегмент данных
mov AH,56h ;Функция переименования
mov DX,offset fname1 ;Исходная спецификация
mov DI,offset fname2 ;Новая спецификация
int 21h
;B сегменте данных
fnamel db 'myfile.txt',0
fname2 db 'myfile0l.txt',0
На самом низком уровне каталог — тот же файл, в атрибуте которого бит 4 установлен в 1 и который содержит список имен вложенных файлов, их атрибутов и физических адресов на диске.