Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
26
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Содержание

Предисловие 3

Введение 6

Глава 1. Архитектура реального режима 10

  1. Память и процессор 10

  2. Распределение адресного пространства 14

  3. Регистры процессора 17

  4. Сегментная структура программ 22

  5. Стек 29

  6. Система прерываний 31

  7. Система ввода-вывода 35

Глава 2. Основы программирования 40

  1. Подготовка и отладка программы 40

  2. Представление данных 50

  3. Описание данных 54

  4. Структуры и записи 59

  5. Способы адресации 62

  6. Переходы 74

  7. Вызовы подпрограмм 82

  8. Макросредства ассемблера 86

Глава 3. Команды и алгоритмы 96

  1. Организация приложений MS-DOS 96

  2. Циклы и условные переходы 123

  3. Обработка строк 130

  4. Использование подпрограмм 134

  5. Двоично-десятичные числа 139

  6. Программирование аппаратных средств 148

Глава 4. Расширенные возможности современных микропроцессоров 160

  1. Архитектурные особенности 160

  2. Дополнительные режимы адресации 163

  3. Использование средств 32-разрядных процессоров в программировании 165

  4. Основы защищенного режима 175

Приложение. Система команд процессоров Intel 197

ААА ASCII-коррекция регистра АХ после сложения 198

AAD ASCII-коррекция регистра АХ перед делением 198

ААМ AS СП-коррекция регистра АХ после умножения 199

AAS ASCII-коррекция регистра AL после вычитания 199

ADC Целочисленное сложение с переносом 199

ADD Целочисленное сложение 201

AND Логическое И 202

386Р+ ARPL Коррекция запрашиваемого уровня привилегий селектора 202

386+ BOUND Проверка индекса массива на выход за границы массива 202

386+ BSF Прямое сканирование битов .203

386+ BSR Обратное сканирование битов 203

486+ BSWAP Обмен байтов 204

Содержание

386+ ВТ Проверка бита 204

386+ ВТС Проверка и инверсия бита 205

386+ ВТК Проверка и сброс бита 206

386+ BTS Проверка и установка бита 206

CALL Вызов подпрограммы 207

CBW Преобразование байта в слово 210

386+ CDQ Преобразование двойного слова в четверное 210

CLC Сброс флага переноса 210

CLD Сброс флага направления 210

CLI Сброс флага прерываний 211

386Р+ CLTS Сброс флага переключения задачи в управляющем регистре 0 211

CMC Инвертирование флага переноса 211

СМР Сравнение 211

CMPS Сравнение строк 212

CMPSB Сравнение строк по байтам 212

CMPSW Сравнение строк по словам 212

386+ CMPSD Сравнение строк по двойным словам 215

486+ CMPXCHG Сравнение и обмен 215

Pentium+ CMPXCHG8B Сравнение и обмен 8 байтов 216

Pentium+ CPU1D Идентификация процессора 218

CWD Преобразование слова в двойное слово 218

386+ CWDE Преобразование слова в двойное слово с расширением 219

DAA Десятичная коррекция в регистре AL после сложения 219

DAS Десятичная коррекция в регистре AL после вычитания 220

DEC Декремент (уменьшение на 1} 220

DIV Деление целых чисел без знака 221

386+ ENTER Создание стекового кадра для параметров процедуры 222

HLT Останов ; 224

IDIV Деление целых чисел со знаком 224

IMUL Умножение целых чисел со знаком 225

IN Ввод из порта 227

INC Инкремент (увеличение на 1) 228

386+

INS Ввод строки из порта 228

INSB Ввод байта из порта 228

1NSW Ввод слова из порта 228

INSD Ввод двойного слова из порта 228

INT Программное прерывание 229

INTO Прерывание по переполнению 230

IRET Возврат из прерывания 230

386+ 1RETD Возврат из прерывания в 32-разрядном режиме 230

Jcc Команды условных переходов :..231

JMP Безусловный переход 232

LAHF Загрузка флагов в регистр АН 234

386Р+ LAR Загрузка прав доступа 235

LDS Загрузка указателя с использованием регистра DS 235

LEA Загрузка исполнительного адреса 236

386+ LEAVE Выход из процедуры высокого уровня 237

LES Загрузка указателя с использованием регистра ES 237

386+

LFS Загрузка указателя с использованием регистра FS 238

LGS Загрузка указателя с использованием регистра FS 238

Содержание

'

LSS Загрузка указателя с использованием регистра FS 238

386Р+ LGDT Загрузка регистра таблицы глобальных дескрипторов 238

3S6P+ LIDT Загрузка регистра таблицы дескрипторов прерываний 238

386Р+ LLDT Загрузка регистра таблицы локальных дескрипторов 239

3863+ LMSW Загрузка слова состояния машины 239

LOCK Запирание шины 239

LODS Загрузка операнда из строки 241

LODSB Загрузка байта из строки 241

LODSW Загрузка слова из строки 241

386+ LODSD Загрузка двойного слова из строки 241

LOOP Циклическое выполнение, пока содержимое СХ не равно нулю 242

LOOPE/LOOPZ Циклическое выполнение, пока равно/циклическое

выполнение, пока нуль 243

LOOPNE/LOOPNZ Циклическое выполнение, пока не равно/циклическое

выполнение, пока не нуль 243

3S6P+ LSL Загрузка границы сегмента 244

386Р+ LTR Загрузка регистра задачи TR 244

MOV Пересыпка данных 245

3S6P+ MOV Пересылка в\из специальных регистров 246

MOVS Пересылка данных из строки в строку 246

MOVSB Пересылка байта данных из строки в строку 246

MOVSW Пересылка слова данных из строки в строку 246

386+ MOVSD Пересылка двойного слова из строки в строку 249

386+ MOVSX Пересылка с расширением знака 249

386+ MOVZX Пересылка с расширением нуля 250

MUL Умножение целых чисел без знака 250

NEG Изменение знака, дополнение до 2 :. 252

NOP Холостая команда 252

NOT Инверсия, дополнение до 1, логическое отрицание 253

OR Логическое ВКЛЮЧАЮЩЕЕ ИЛИ 253

OUT Вывод в порт 254

386+

OUTS Вывод строки в порт 255

OUTSB Вывод байта в порт 255

OUTSW Вывод слова в порт 255

OUTSD Вывод двойного слова в порт 255

POP Извлечение слова из стека 256

3S6+ РОРА Восстановление из стека всех регистров 257

386+ РОРАЦ Восстановление из стека всех регистров в 32-разрядном режиме.. 257

POPF Восстановление из стека регистра флагов 257

386+ POPFD Восстановление из стека расширенного регистра флагов 258

PUSH Занесение операнда в стек 258

3S6+ PUSHA Сохранение в стеке всех регистров 259

386+ PUSHAD Сохранение в стеке всех регистров в 32-разрядном режиме .... 259 386+ PUSHFD Занесение в стек содержимого расширенного регистра флагов.. 259

RCL Циклический сдвиг влево через бит переноса 260

RCR Циклический сдвиг вправо через бит переноса 261

Pentium+P RDMSR Чтение особого регистра модели - 262

REP Повторение : 262

REPE Повторение пока равно 262

REPZ Повторение пока нуль 262

REPNE Повторение пока равно 262

REPNZ Повторение пока не равно 262

Содержание

RET Возврат из процедуры 262

RETN Возврат из ближней процедуры 262

RETF Возврат из дальней процедуры 262

ROL Циклический сдвиг влево 263

ROR Циклический сдвиг вправо 265

SAHF Запись содержимого регистра АН в регистр флагов 266

SAL Арифметический сдвиг влево 266

SAR Арифметический сдвиг вправо 267

SBB Целочисленное вычитание с займом 268

SCAS Сканирование строки с целью сравнения 270

SCASB Сканирование строки байтов с целью сравнения 270

SCASW Сканирование строки слов с целью сравнения 270

386+ SCASD Сканирование строки двойных слов с целью сравнения 271

386+ SETcc Установка байта по условию 272

SHL Логический сдвиг влево 273

386+ SHLD Логический сдвиг влево с двойной точностью 273

SHR Логический сдвиг вправо 274

386+ SHRD Логический'сдвиг вправо с двойной точностью 275

3S6P+ SIDT Сохранение в памяти содержимого регистра таблицы

дескрипторов прерываний 276

3S6P+ SLDT Сохранение содержимого регистра таблицы локальных

дескрипторов 276

3S6P+ SMSW Сохранение слова состояния машины 277

STC Установка флага переноса 277

STD Установка флага направления 277

STJ Установка флага прерывания 277

STOS Запись в строку данных 277

STOSB Запись байта в строку данных 277

STOSW Запись слова в строку данных 277

386+ STOSD Запись двойного слова в строку данных 279

3S6P+ STR Сохранение содержимого регистра состояния задачи 279

SUB Вычитание целых чисел 279

TEST Логическое сравнение 280

386Р+ VERR Проверка сегмента на чтение 282

386Р+ VERW Проверка сегмента на запись 282

486+ XADD. Обмен и сложение 282

XCHG Обмен данными между операндами 282

XLAT Табличная трансляция 283

3S6+XLAT 283

386+XLATB 283

XOR Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ 284