Рекомендуем

Книга

Использование языка Ассемблера

Использование языка Ассемблера

.Учебное пособие для вузов
2004 г.
438 стр.
Тираж 2000 экз.
Формат 60х90/16 (145x215 мм)
Исполнение: в мягкой обложке
ISBN 5-93517-118-X
ББК 32.97
УДК 681.3
Гриф УМО
Рекомендовано УМО по образованию в области прикладной информатики в качестве учебного пособия для студентов высших учебных заведений, обучающихся по специальности 351400 -«Прикладная информатика (по областям)»
Аннотация
Книга представляет собой учебное пособие по языку ассемблера для персональных компьютеров. Описаны особенности архитектуры микропроцессоров Intel и всего компьютера в целом, правила составления программ, основные конструкции языка и приемы программирования, принципы программирования подключаемой к компьютеру аппаратуры. Дано сжатое описание принципов защищенного режима с примером программирования. Отдельная глава посвящена составлению на языке ассемблера 16- и 32-разрядных приложений Windows. В приложении даны основные операторы ассемблера и команды процессора Pentium с примерами и пояснениями. В основу учебного пособия легли материалы популярной книги Финогенов К.Г. «Основы программирования на языке Ассемблера», выдержавшей два издания и широко используемой в учебном процессе. Для студентов и преподавателей средних и высших учебных заведений, а также для всех желающих познакомиться с основами программирования.

Оглавление

Содержание

Предисловие
Введение

Глава 1. Архитектура реального режима
1.1. Память и процессор
1.2. Распределение адресного пространства
1.3. Регистры процессора
1.4. Сегментная структура программ
1.5. Стек
1.6. Система прерываний
1.7. Система ввода-вывода

Глава 2. Основы программирования
2.1. Подготовка и отладка программы
2.2. Представление данных
2.3. Описание данных
2.4. Структуры и записи
2.5. Способы адресации
2.6. Переходы
2.7. Вызовы подпрограмм
2.8. Макросредства ассемблера

Глава 3. Команды и алгоритмы
3.1. Организация приложений MS-DOS
3.2. Циклы и условные переходы
3.3. Обработка строк
3.4. Использование подпрограмм
3.5. Двоично-десятичные числа
3.6. Программирование аппаратных средств

Глава 4. Расширенные возможности современных микропроцессоров
4.1. Архитектурные особенности
4.2. Дополнительные режимы адресации
4.3. Использование средств 32-разрядных процессоров в программировании
4.4. Основы защищенного режима

Глава 5. Программирование для Windows
5.1. Приложения Windows и язык ассемблера
5.2. Дополнительные средства ассемблера
5.3. Простейшее приложение Windows
5.4. Основы программирования Windows
5.5. Изобразительные средства в главном окне
5.6. Меню и диалоги
5.7. 32-разрядные приложения Windows

Приложение А. Система команд процессоров Intel
AAA ASCII-коррекция регистра AX после сложения
AAD ASCII-коррекция регистра AX перед делением
AAM ASCII-коррекция регистра AX после умножения
AAS ASCII-коррекция регистра AL после вычитания
ADC Целочисленное сложение с переносом
ADD Целочисленное сложение
AND Логическое И
ARPL Коррекция запрашиваемого уровня привилегий селектора
BOUND Проверка индекса массива на выход за границы массива
BSF Прямое сканирование битов
BSR Обратное сканирование битов
BSWAP Обмен байтов
BT Проверка бита
BTC Проверка и инверсия бита
BTR Проверка и сброс бита
BTS Проверка и установка бита
CALL Вызов подпрограммы
CBW Преобразование байта в слово
CDQ Преобразование двойного слова в четверное
CLC Сброс флага переноса
CLD Сброс флага направления
CLI Сброс флага прерываний
CLTS Сброс флага переключения задачи в управляющем регистре 0
CMC Инвертирование флага переноса
CMP Сравнение
CMPS Сравнение строк
CMPSB Сравнение строк по байтам
CMPSW Сравнение строк по словам
CMPSD Сравнение строк по двойным словам
CMPXCHG Сравнение и обмен
CMPXCHG8B Сравнение и обмен 8 байтов
CPUID Идентификация процессора
CWD Преобразование слова в двойное слово
CWDE Преобразование слова в двойное слово с расширением
DAA Десятичная коррекция в регистре AL после сложения
DAS Десятичная коррекция в регистре AL после вычитания
DEC Декремент (уменьшение на 1)
DIV Деление целых чисел без знака
ENTER Создание стекового кадра для параметров процедуры
HLT Останов
IDIV Деление целых чисел со знаком
IMUL Умножение целых чисел со знаком
IN Ввод из порта
INC Инкремент (увеличение на 1)
INS Ввод строки из порта
INSB Ввод байта из порта
INSW Ввод слова из порта
INSD Ввод двойного слова из порта
INT Программное прерывание
INTO Прерывание по переполнению
IRET Возврат из прерывания
IRETD Возврат из прерывания в 32-разрядном режиме
Jcc Команды условных переходов
JMP Безусловный переход
LAHF Загрузка флагов в регистр AH
LAR Загрузка прав доступа
LDS Загрузка указателя с использованием регистра DS
LEA Загрузка исполнительного адреса
LEAVE Выход из процедуры высокого уровня
LES Загрузка указателя с использованием регистра ES
LFS Загрузка указателя с использованием регистра FS
LGS Загрузка указателя с использованием регистра FS
LSS Загрузка указателя с использованием регистра FS
LGDT Загрузка регистра таблицы глобальных дескрипторов
LIDT Загрузка регистра таблицы дескрипторов прерываний
LLDT Загрузка регистра таблицы локальных дескрипторов
LMSW Загрузка слова состояния машины
LOCK Запирание шины
LODS Загрузка операнда из строки
LODSB Загрузка байта из строки
LODSW Загрузка слова из строки
LODSD Загрузка двойного слова из строки
LOOP Циклическое выполнение, пока содержимое CX не равно нулю
LOOPE/LOOPZ Циклическое выполнение, пока равно/циклическое выполнение, пока нуль
LOOPNE/LOOPNZ Циклическое выполнение, пока не равно/циклическое выполнение, пока не нуль
LSL Загрузка границы сегмента
LTR Загрузка регистра задачи TR
MOV Пересылка данных
MOV Пересылка виз специальных регистров
MOVS Пересылка данных из строки в строку
MOVSB Пересылка байта данных из строки в строку
MOVSW Пересылка слова данных из строки в строку
MOVSD Пересылка двойного слова из строки в строку
MOVSX Пересылка с расширением знака
MOVZX Пересылка с расширением нуля
MUL Умножение целых чисел без знака
NEG Изменение знака, дополнение до 2
NOP Холостая команда
NOT Инверсия, дополнение до 1, логическое отрицание
OR Логическое ВКЛЮЧАЮЩЕЕ ИЛИ
OUT Вывод в порт
OUTS Вывод строки в порт
OUTSB Вывод байта в порт
OUTSW Вывод слова в порт
OUTSD Вывод двойного слова в порт
POP Извлечение слова из стека
POPA Восстановление из стека всех регистров
POPAD Восстановление из стека всех регистров в 32-разрядном режиме
POPF Восстановление из стека регистра флагов
POPFD Восстановление из стека расширенного регистра флагов
PUSH Занесение операнда в стек
PUSHA Сохранение в стеке всех регистров
PUSHAD Сохранение в стеке всех регистров в 32-разрядном режиме
PUSHFD Занесение в стек содержимого расширенного регистра флагов
RCL Циклический сдвиг влево через бит переноса
RCR Циклический сдвиг вправо через бит переноса
RDMSR Чтение особого регистра модели
REP Повторение
REPE Повторение пока равно
REPZ Повторение пока нуль
REPNE Повторение пока равно
REPNZ Повторение пока не равно
RET Возврат из процедуры
RETN Возврат из ближней процедуры
RETF Возврат из дальней процедуры
ROL Циклический сдвиг влево
ROR Циклический сдвиг вправо
SAHF Запись содержимого регистра AH в регистр флагов
SAL Арифметический сдвиг влево
SBB Целочисленное вычитание с займом
SCAS Сканирование строки с целью сравнения
SCASB Сканирование строки байтов с целью сравнения
SCASW Сканирование строки слов с целью сравнения
SCASD Сканирование строки двойных слов с целью сравнения
SETcc Установка байта по условию
SGDT Сохранение в памяти содержимого регистра таблицы глобальных дескрипторов
SHL Логический сдвиг влево
SHLD Логический сдвиг влево двойного слова
SHR Логический сдвиг вправо
SHRD Логический сдвиг вправо двойного слова
SIDT Сохранение в памяти содержимого регистра таблицы дескрипторов прерываний
SLDT Сохранение содержимого регистра таблицы локальных дескрипторов
SMSW Сохранение слова состояния машины
STC Установка флага переноса
STD Установка флага направления
STI Установка флага прерывания
STOS Запись в строку данных
STOSB Запись байта в строку данных
STOSW Запись слова в строку данных
STOSD Запись двойного слова в строку данных
STR Сохранение содержимого регистра состояния задачи
SUB Вычитание целых чисел
TEST Логическое сравнение
VERR Проверка сегмента на чтение
VERW Проверка сегмента на запись
XADD Обмен и сложение
XCHG Обмен данными между операндами
XLAT Табличная трансляция
XLAT Табличная трансляция (386+)
XLATB Табличная трансляция (386+)
XOR Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ
Приложение Б. Основные операторы ассемблера TASM
Директивы определения данных
DB Определение данных размером в байт
DW Определение данных размером в слово
DD Определение данных размером в двойное слово
DQ Определение данных размером в четверное слово
DF Определение данных размером в 6 байт
DP Определение данных размером в 6 байт
DT Определение данных размером в 10 байт
Директивы присваивания
EQU Присвоение значения указанному идентификатору
= Присвоение значения указанному идентификатору
Директивы счетчика текущего адреса
$ Идентификатор счетчика текущего адреса
LABEL Задание значения идентификатора (имени поля данных или программной метки)
ORG Установка значения счетчика текущего адреса
Операторы типа
PTR Задание типа переменной или метки
OFFSET Возвращает смещение (младшую часть адреса)
SEG Возвращает сегмент (старшую часть адреса)
Директивы организации сегментов и процедур
SEGMENT Открытие сегмента памяти
ENDS Закрытие сегмента памяти
PROC Указание начала процедуры
ENDP Указание конца процедуры
ASSUME Задание сегментного регистра, используемого по умолчанию
Директивы описания макросов
MACRO Начало определения макроса
ENDM Конец определения макроса
LOCAL Объявление временных имен меток, заменяемых в процессе повторных макрорасширений на уникальные имена
Директива повторения
REPT Повторение предложений языка
Директивы организации листинга
.XLIST Подавление дальнейшего вывода в листинг трансляции
.LIST Разрешение дальнейшего вывода в листинг трансляции
.SALL Подавление вывода в листинг трансляции текстов макрорасширений
Директивы условной трансляции
IF Трансляция по заданному условию
IFDEF Трансляция при условии, что идентификатор определен
IFNDEF Трансляция при условии, что идентификатор не определен
Директивы организации структуры программы
.MODEL Задание модели памяти
.CODE Открытие сегмента команд
.DATA Открытие сегмента данных
.FARDATA Открытие дальнего сегмента данных
.STACK Открытие сегмента стека
PROC расширенная форма описания процедуры
CALL расширенная форма вызова процедуры
LOCALS Объявление локальных идентификаторов