Дао Л. 3 Программирование микропроцессора 8088: Пер. с англ. — М.: Мир, 1988.— 357 с., ил. ISBN 5-03-000232-4 Книга американского автора является простым и доступным для широкого круга пользователей пособием по программированию на языке ассемблера микропроцессора 8088. В качестве примеров приводятся 20 программ, реализующих алгоритмы типовых задач сбора и обработки данных. Описывается архитектура микропроцессора с использованием 32-разрядных регистров, позволяющих создавать микро-ЭВМ больших вычислительных возможностей* Для программистов и специалистов, использующих вычислительную технику и желающих ознакомиться с программированием микро-ЭВМ.
ПРЕДИСЛОВИЕ К РУССКОМУ ИЗДАНИЮ
Персональные ЭВМ оказались первыми программно-управляемыми вычислительными средствами, доступными широкому кругу пользователей. Это позволило последним приступить к активной формализации знаний с целью автоматизации рутинной части интеллектуальной деятельности. Появление персональных ЭВМ, положивших начало эре «компьютерной» грамотности, по значимости для развития человечества можно сравнить с изобретением книгопечатания.
Чтобы «общаться» с машиной, необходимо знать ее входной язык и иметь возможность прямого доступа к вычислительным ресурсам для обработки данных по формализованным алгоритмам. До недавнего времени формализация алгоритмов и разработка соответствующих программ оставались прерогативой профессиональных программистов. Однако в связи с быстрым ростом числа ЭВМ и областей их проблемной ориентации остро встала проблема подготовки нужного числа программистов. Кроме того, решение ряда задач, например в биотехнологии, сегодня возможно только на основе неформализованных знаний специалистов, что требует их личного участия в процессе формализации алгоритмов. При этом за программистами остаются функции системного сопровождения разработки программ пользователем и создание базового программного обеспечения комплекса. Пользователь составляет "программы на одном из языков высокого уровня. Когда его потребности выходят за пределы возможностей освоенной версии языка, программист разрабатывает новые процедуры этого языка, расширяющие его функциональные возможности. По мере развития описанного процесса частота контактов
ОГЛАВЛЕНИЕ
X
Предисловие к русскому изданию...........5
Предисловие...................7
Глава I ОБЩИЕ ПРИНЦИПЫ ПОСТРОЕНИЯ МИКРО-ЭВМ
Аппаратная часть ................ 10
Программное обеспечение компьютера........ 18
Представление информации в микро-ЭВМ....... 26
Персональная микро-ЭВМ фирмы IBM........ 37
Глава II , МИКРОПРОЦЕССОР Intel 8088
Машинный язык................. 47
Архитектура процессора ...... ........ 48
Организация памяти и адресации.......... 64
Режимы адресации................ 69
Работа со стековой памятью............ 80
Прерывания работы микропроцессора........ 86
Глава III ЯЗЫК АССЕМБЛЕРА МИКРОПРОЦЕССОРА 8088
Почему необходим язык ассемблера?.....'....' 98
Формат программы................100
Распространенные ошибки программирования на языке ассемблера ...................120
Макрокоманды..................126
Глава IV СИСТЕМА КОМАНД
ААА-коррекция кода ASCII при сложении.......123
AAD-коррекция кода ASCII при делении.......131
ААМ-коррекция кода ASCII при умножении......133
AAS-коррекция кода ASCII при вычитании.......134
ADC-сложение с переносом.............135
ADD-сложение..................137
AND-логическое умножение.............139
CALL-вызов процедуры..............141
353
CBW-преобразование байта в слово.........144
CLC-сброс флага переноса.............145
CLD-сброс флага направления............145
CLI-сброс флага прерываний.............146
CMC-инверсия флага переноса...........147
СМР-сравнение операндов.............143
CMPS-сравнение строк ..............149
CWD-преобразование слова в двойное слово......151
DAA-десятичная коррекция при сложении.......152
DAS-десятичная коррекция при вычитании.......153
DJV-деление...................155
ESC-выдача...................137»
HLT-останов...................158
IDIV-целочисленное деление............159
IMUL-целочисленное умножение ...........161
IN-ввод из порта.................163
INC-инкремент.................. 164
INT-программное прерывание............165
INTO-прерывание по переполнению..........167
IRET-возврат из прерывания............168
JA/JNBE-переход, если больше/переход, если не меньше или
равно .....................169
JAE/JNB/JNC:nepexoA, если больше или равно/переход, если
не меньше/переход, если нет переноса........170
JB/JNAE/JC-переход, если меньше/переход, если не больше
или равно/переход, если есть перенос........171
JBE/JNA-переход, если меньше или равно/переход, если не
больше....................173
JCXZ-переход, если содержимое регистра СХ равно нулю 174
JE/JZ-переход, если равно/переход по нулю......175
JG/JNLE-переход, если больше чем/переход, если не меньше чем или равно...............176
JGE/JNL-переход, если больше или равно/переход, если не
меньше чем..................177
JL/JNGE-переход, если меньше/переход, если не больше или
равно..........:.......... 178
JLE/JNG-переход, если меньше или равно/переход, если
больше....................179
JMP-безусловный переход.............181
JHE/JNZ-переход по неравенству/переход, если не нуль . .183
JNO-переход, если нет переполнения.........18 i
JNP/JPO-переход при отсутствии четности.......185
JNS-переход, если нет знака............186
JO-переход по переполнению............187
JP/JPE-переход по четности............183
JS-переход по знаку...............189
LAHF-загрузка регистра АН из регистра флагов . . . .190
LDS-загрузка указателя в регистр DS........191
LEA-загрузка исполнительного адреса.........192
LES-загрузка указателя с использованием регистра ES 193
LOCK-захват шины................194
LODS-загрузка строки..............195
LOOP-цикл...............'.....196
LOOPE/LOOPZ-цикл если равно/цикл если нуль......19?
LQOPNE/LOOPNZ-цикл если не равно/цикл если не нуль 199
354
MOV-пересылка .................200
MOVS-пересылка строки..............202
MUL-умножение .................204
NEG-отрицание..................205
NOP-отсутствие операции.............205
NOT-логическое отрицание .............207
OR-логическое ИЛИ...............208
OUT-вывод в порт................210
PUSHF-запись в стек содержимого регистра флагов . .211 POPF-чтение из стека содержимого регистра флагов . . . 212
PUSH-запись в стек...............213
POP-чтение из стека...............215
RCL-циклический сдвиг влево через перенос......2IS
RCR-циклический сдвиг вправо через перенос.....218
REP/REPE/REPZ-повторение/повторение если равно/повторение если нуль................21Э
RET-возврат из процедуры.............229
ROL-циклический сдвиг влево............222
ROR-циклический сдвиг вправо...........223
REPNE/REPNZ-повторение если равно/повторение если нуль 225 SAHF-запись содержимого регистра АН в регистр флагов 226 SAL/SHL-арифметический сдвиг влево/логический сдвиг влево 227
SAR-арифметический сдвиг вправо..........228
SBB-вычитание с заемом..............230
SCAS-сканированве строк.............232
SHR-логический сдвиг вправо............234
STC-установить флаг переноса . . . ........235
STD-установить флаг направления..........238
STI-установить флаг прерывания...........236
STOS-запомнить строку..............237
SUB-вычитание..................238
TEST-тест....................240
WAIT-ожидание .................242
XCHG-замена..................243
XLAT-передача из таблицы.............244
XOR-исключающее ИЛИ..............245
Глава V АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ
Арифметические команды.............248
Арифметические операции с 32-разрядными числами . . . 252
Генерация псевдослучайных чисел .......... 262
Перевод чисел из шестнадцатеричного представления в десятичное...................269
Глава VI ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Стандартные операции ............... 272
Логические команды............... 273
Преобразования разрядов операндов ....... . . 275
Буквенные преобразования ............. 276
Засекречивание и восстановление данных ....... 283
355
Глава VII ПЕРЕСЫЛКА ДАННЫХ
Команды пересылки данных............295
Перемещение данных в перекрывающихся последовательностях-строках ..................297
Взаимные преобразования кодов ASCII и EBCDIC . . . 299
Поиск последовательности знаков .......... 302
Преобразования дважды связанных списков......303
Глава VIII ПЕРЕДАЧА УПРАВЛЕНИЯ
Команды переходов................313
Цикл......................316
Структура процедуры ............... 319
«Пузырьковая» сортировка.............323
Перевод алгебраического выражения в обратную польскую
запись ...................325
Рекурсивное программирование...........333
Глава IX ЦИКЛИЧЕСКИЙ И ЛИНЕЙНЫЙ СДВИГ
Команды циклического сдвига........... 343
Команды линейного сдвига............. 345
Декодирование машинных команд.......... 347
Применение префикса переназначения сегмента...... 349


Hosted by uCoz