
- •Лекция №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].
Технология sse. Блок xmm
Начиная с Intel Pentium 3 микропроцессоры снабдили новой технологией SSE (Stream SIMD Extension, потоковое SIMD-расширение) для одновременной обработки чисел с плавающей точкой.
SSE - это 8 новых 128-битных регистров: XMM0-XMM7, позволяющие вместить четыре 32-битных числа или два 64-битных числа с плавающей точкой.
Для целочисленных переменных это значит одновременную обработку: 16 однобайтных, 8 двухбайтных, 4 4-байтных или 2 8-байтных чисел.
Затем в Pentium 4 появилась SSE2, принёсшая новые инструкции. Далее последовали SSE3 и SSSE3 (SSE4), дающие некоторый прирост производительности.
Кроме инструкций с новым блоком XMM технология SSE включает и дополнительные целочисленные инструкции с регистрами MMX, а также инструкции управления кэшированием.
Особенности новых технологий:
-
В большинстве случаев отсутствуют признаки, характеризующие результат выполнения операции, которые обычно хранятся в регистре флагов (EFLAGS). При работе с целыми числами невозможно контролировать переполнение результата и надо изменять алгоритм вычислений так, чтобы исключить переполнение.
-
При сравнении целых или вещественных чисел разряды, занимаемые каждым числом в группе первого операнда (приемника) либо заполняются единицами, либо очищаются. Все единицы являются признаком выполнения указанного в команде условия для данной пары чисел, все нули означают, что для данной пары условие не выполнено.
-
Имеются специальные команды сравнения двух вещественных чисел. После их выполнения формируются и помещаются в eflags признаки, характеризующие результат операции.
Лекция №3. Регистры флагов. Данные в ассемблере. Операнды языка Ассемблер. Команды передачи управления.
Регистр флагов (рис. 3.2) (регистр признаков) — EFLAGS состоит из одноразрядных флагов, отображающих в основном текущее состояние арифметико-логического устройства. Разрядность eflags/flags - 32/16 бит. Младшая часть этого регистра полностью аналогична регистру flags для i8086.
Рис. 3.2. Содержимое регистра eflags
Флаги регистра eflags/flags можно разделить на три группы.
-
8 Флагов состояния. Эти флаги могут изменяться после выполнения машинных команд;
-
1 флаг направления. Обозначается как df (Directory Flag). Используется цепочечными командами;
-
8 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086.
Таблица 2.1. Флаги состояния
Мнемоника флага |
Флаг в eflags |
Номер бита |
Содержание и назначение |
Cf |
Флаг переноса (Carry Flag) |
0 |
1, если арифметическая операция произвела перенос из старшего бита результата. Старшим является 7-й, 15-й или 31-й бит в зависимости от размерности операнда; 0 - переноса не было |
Pf |
Флаг чётности (Parity Flag) |
2 |
1, если 8 младших разрядов (этот флаг - только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц; 0, если 8 младших разрядов результата содержат нечетное число единиц |
af |
Вспомогательный флаг переноса (Auxiliary carry Flag) |
4 |
1, если в результате предыдущей операции произошёл перенос (или заём) из третьего бита в четвёртый. Используется командами двоично-десятичной коррекции |
zf |
Флаг нуля (Zero Flag) |
6 |
1, если результат нулевой; 0, если результат ненулевой
|
sf |
Флаг знака (Sign Flag) |
7 |
1, если старший бит результата равен 1; 0, если старший бит результата равен 0 |
of |
Флаг переполнения (Overflow Flag) |
11 |
Флаг of используется для фиксирования факта потери значащего бита при арифметических операциях: 1, если в результате операции происходит перенос (заем) в (из) старшего, знакового бита результата (биты 7, 15 или 31 для 8-, 16- или 32-разрядных операндов, соответственно); 0, если в результате операции не происходит переноса (заема) в (из) старшего, знакового бита результата |
iopl |
Уровень привилегий ввода-вывода (Input/Output Privilege Level) |
12, 13 |
Используется в защищенном режиме работы микропроцессора для контроля доступа к командам ввода-вывода |
nt |
Флаг вложен ности задачи (Nested Task) |
14 |
Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую |
Таблица 2.2. Системные флаги
Мнемоника флага |
Флаг в eflags |
Номер бита |
Содержание и назначение |
tf |
Флаг трассировки (Trace Flag) |
8 |
Если 1 - микропроцессор генерирует прерывание с номером 1 после выполнения каждой машинной команды. |
if |
Флаг прерывания (Interrupt enable Flag) |
9 |
Предназначен для разрешения или запрещения (маскирования) аппаратных прерываний. 1 - аппаратные прерывания разрешены; 0 - аппаратные прерывания запрещены |
rf |
Флаг возобновления (Resume Flag) |
16 |
Используется при обработке прерываний от регистров отладки |
vm |
Флаг виртуального 8086 (Virtual 8086 Mode) |
17 |
1 - процессор работает в режиме виртуального 8086; 0 - процессор работает в реальном или защищенном режиме |
ac |
Флаг контроля выравнивания (Alignment Check) |
18 |
Предназначен для разрешения контроля выравнивания при обращениях к памяти. Pentium разрешает размещать команды и данные с любого адреса. Если требуется контролировать выравнивание данных и команд по адресам, кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут возбуждать исключительную ситуацию.
|
Vif |
Флаг виртуального прерывания (Virtual Interrupt Flag) |
19 |
При определенных условиях (одно из которых - работа микропроцессора в V-режиме) является аналогом флага if. Флаг vif используется совместно с флагом vip. Флаг появился в микропроцессоре Pentium |
vip |
Флаг отложенного виртуального прерывания (Virtual Interrupt Pending flag) |
20 |
Устанавливается в 1 для индикации отложенного прерывания. Используется при работе в V-режиме совместно с флагом vif. Флаг появился в микропроцессоре Pentium |
Id |
Флаг идентификации (Identification flag) |
21 |
Используется для того, чтобы показать факт поддержки микропроцессором инструкции cpuid, с помощью которой можно "запросить" у процессора его идентификатор CPUID. |
Данные в ассемблере
Секции .data, .data? и .const нужны для определения данных программы. Место под данные резервируется с помощью директив db, dw, dd, dq, dt.
db - 1 байт
dw - 2 байта - 1 слово
dd - 4 байта - 2 слова
dq - 8 байт - 4 слова
dt - 10 байт
Все данные из секции .data включаются в исполнимый файл. В секции .data? данные нельзя инициализировать. Все данные в этой секции не включаются в исполнимый файл. Секция .const предназначена только для чтения. При попытке изменить эти данные ошибок не возникает.
.data
Perem dd 0000FF11h ;0000 0000 0000 0000 1111 1111 0001 0001
X1 dw 01235h ;0001 0010 0011 0101
Binary db 00111010b ;00111010
decimal dw 28d ;0001 1100
large dq 01123456789ABCDEFh ;0001 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
.data?
Perem1 dd ? 0000 0000 0000 0000 0000 0000 0000 0000
Perem2 dq ? 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Perem5 dw ? 0000 0000 0000 0000
Dd ? 0000 0000 0000 0000 0000 0000 0000 0000
Dw ? 0000 0000 0000 0000
Perem4 db ? 0000 0000
.const
Const1 dd 012345678h 0001 0010 0011 0100 0101 0110 0111 1000
dw 768d 0000 0011 0000 0000
Строки.
В ассемблере можно задавать только ANSI строки, Unicode строки сложнее задавать и для их обработки существует целый ряд API функций.