Assembler для начинающих

Assembler для начинающих

Об этой книге
Персональный компьютер фирмы IBM (IBM PC)
Программирование на языке Ассемблера

Двоичная арифметика

Биты, байты и слова
В предыдущих примерах мы размещали
имеет для программиста значение отличное
Одна из обескураживающих черт 8088
а 8088 всегда разберется что

Двоичная арифметика
называется бит от Binary digIT



Двоичное дополнение
Assembler для начинающих

Машинный язык и язык Ассемблера
это часть процессора, предназанченная для
можно было иметь дело непосредственно

Набор символов
Набор символов - часть 2
Набор символов IBM PC является
В некоторых случаях вы захотите

Нумерация бит

Прерывания
цессор действует так, как будто
редает управление программе обработки прерывания,

Принципы работы Ассемблера
Взяв пример команды ассемблера, рассмотрим

Принципы работы компьютера
Команда перехода
в этом примере прерывается, когда

Процедуры
берет адрес, который был сохранен
выполнения осуществлялся на A2, во

Шестнадцатиричное представление
Десятичные числа пишутся без суффикса

Синаксис языка Ассемблера
символический указатель  расположения команды. Если 

Стек
который теперь указывает на новую
Указатель стека постоянно указывает на
Одна процедура может вызывать другую,
что ограничивает глубину вложения процедур

Модель программирования 8088

<Адресация через базу и смещение

Байт MOD R-M
Этот же байт используется еще 

База + индекс + смещение
127 до  127, то для 

Дополнительный флаг переноса
Набор команд  микропроцессора 8088 не 
при коррекции  десятичной арифметики вслед

Физическая адресация
Флаг четности

Флаг направления
установлены на начала соответствующих блоков:

Флаг нуля.
Флаг переноса
Поскольку результат имеет длину 17
переноса содержит  семнадцатый бит  предыдущего

Флаг переполнения
и имеют  разное значение. На

Флаг прерываний
Флаг захвата
Флаг знака
специальные ячейки памяти, называемые регистрами.

Оператор Assume
с учетом следующей  установки сегментных
что сегментные регистры устанавливаются  до
помогает программисту ассемблера сосредоточиться на

Оператор Segment
Оператор SEGMENT определяет все  сегменты,

Предназначение сегментов
Прямая адресация
Регистр флагов

Регистры адресации
битовых операндов, но отдельные байты

Регистры общего назначения
Сегментные регистры
операцией такого рода является  копирование
Указатель стека

ма поместит в  стек более
Управляющие рагистры

Векторы прерываний
возврат из программы обработки прерывания
прерывания по указанному программой однобайтовому

Вычисление адресов
нительный адрес, оставив результат в 

Команды управления микропроцессором

Адресация переходов
Арифметические команды

Арифметический пример
разрядные целые числа со

Арифметика с одним операндом

Безусловные переходы
Программы могут модифицировать возвраты как
если обнаружит, что переход делается

Близкие и далекие переходы

Десятичная коррекция
Сложение двух упакованных чисел размером
Команда DAA правильно устанавливает регистр

Команда деления
причем регистр DX содержит старшую
деление на число, отличное от

Команда пересылки
Микропроцессор 8088 не имеет возможности
или из другого регистра. Однако
изображен листинг ассемблера некоторых
Никакие из команд MOV не
в примере это регистр AX,

Команда преобразования
Команда замены
Команды обработки строк
Команды передачи управления

Команды сканирования и сравнения
непосредственно следующий за сравнением. Вы
‘Є ­Ёа®ў ­ЁҐ в Ў«Ёжл
Ђ¤аҐб в Ў«Ёжл
демонстрирует пример использования команды

Команды управления микропроцессором
Команды ввода и вывода

Логические операции
с битами от первого до
Циклический сдвиг влево на
с битами. Самой малой единицей
выделения битов эти команды используют

Операции сдвига и поворота
Во всех командах сдвига определяется
другой конец. Циклический сдвиг влево
Таким образом, команды сдвига делают
скорость выполнения. Команда IMUL требует
Эта программа программа выделяет один

Операции со стеком
Можно извлечь то, что
программе нужно ввести код из
команда POP. Точно так же,

Передача параметров
что смещения, используемые для доступа
малым объемом памяти, что невозможно

Переходы по условию
На метку ZERO управление передает

Перекодировка
регистр AL. Затем она вычитает
ЏаЁ¬Ґа ЇҐаҐЄ®¤Ёа®ўЄЁ

Пересылка данных
Пересылка флагов
Пересылка строки

Префикс REP
В этом примере область данных

Проверки кода условия
Команда CMP вычитает содержимое регистра
которые могут быть проверены: меньше
флаги установила команда CMP, вычитавшая
которые может проверить микропроцессор. Для

Симовльная коррекция: сложение и вычитание
Символьная коррекция: деление
Символьная коррекция: умножение

Сложение
Обе команды сложения, как ADD,
Установка флагов по AX
Область данных размером 32
в поле VALUE2. Заметим, что

Специальные команды
это командный префикс, такой же,
К сожалению, описание работы префикса

Сравнение
Сравниваются по неравенству два

Умножение
в случае, когда результат не

Управление циклами
Переход пока регистр CX не
выполняет первую команду LOOP, он
пока не равно) выполняет обратную

Установка флагов
Эта программа складывает два десятичных

Вычитание

Загрузка и запись
В первом случае ассемблер определяет,
переменная типа BYTE. Во втором

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

Дисковая операционная система

Ассемблер и макроассемблер
Команда ASM запускает усеченный вариант
Если ассемблер во время ассемблирования
имя файла, который нужно ассемблировать,

Блок управления файлом (FCB)
операции чтения или записи, DOS
другому такой файл называют файлом
94 A0 A9 AB 20
AF E0 A8 20 A7
Пример использования функциямй DOS
8D 3E 0090
Чтение старой записи из
Пример использования функциямй DOS
Пример использования функциямй DOS
осущкствляется редактирование записи: 31 символ
и затем модифицирует. Интерпретатор командных
записывается номер записи при произвольном
каталоге диска, то программа завершит
двух символов и, если необходимо,

Дисковая операционная система

EXTRN и PUBLIC
Тип имени подпрограммы или другой
9D E2 A0 20 AF
Это должно быть так при
с помощью оператора PUBLIC. Это
Данная программа выполняется как программа

Файловая система

Файлы .com и .exe
Обычно перемещением занимается редактор связей.
они загружают программу. Значение регистра
к PSP ячейке со смещением

Функции DOS
программе нужно обрабатывать их иначе,
COM реализует файловую систему. Упомянутые
EXE имеет существенно другой формат

Assembler для начинающих
Имена файлов

Карта связей
Возможно вы заметили, что общая

Командный процессор
выполнять свои функции. Передача управления
Встроенные команды обеспечивают поддержку файловой
Если пользователь введет нерезидентную команду,
и управление им передается по-
и другим способом: задать команду

Многомодульность
ним по очереди. Такой подход

Операция редактирования связей
Следующий запрос редактора связей относится

Отладчик DEBUG
CD 20 00 A0 00
NV UP DI PL NZ
Описанное состояние регистров будет сравниваться
появление значения 0A. Мы уже
соответствуют этим значениям. Если отображение
Теперь попытаемся выполнить эту программу.
то команда возвращает управление отладчику,
Данная команда инициирует выполнение одной

Перекрестные ссылки
Как может быть использован листинг

Преодразование файла типа .exe в файл типа .com.
Остальная часть программы должна быть
BA 09 01 B4 09
NV UP DI NZ NA

Редактор связей

Создание программы на языке Ассемблера
Таким образом, это служит подстраховкой
иллюстрирует выполнение двух этапов
выведена третья строка, готовая для
опять выдается листинг файла для

Таблица символических имен
Bytes symbol space

Макроопределения

Аргументы макрокоманд
текстовую строку из вызова макрокоманды
к ней. Заметьте, что макрокоманда
и использует параметр SOURCE. Такая

Ассемблирование по условию
в зависимости от того, какие
В случае FIDIVR мы ожидаем,
макрокоманда использует второй оператор IFE.
Операторы IF для условного
Вложенные условные
встретил оператора ENDIF, закрывающего условный

Assembler для начинающих

Команды INCLUDE
к ней из любой программы,

Макрокоманды повторения
Повторить команду

Макрооператоры
Однако при ее повторном использовании
макрокомандах сопроцессора 8087. Этот специальный

Макроопределения
в языках высокого уровня нет,
следуют за строкой заголовка. Наконец,
строка вставлена макропроцессором. Если сравнить
вставляется вызов макрокоманды. Ассемблер генерирует
зависит от того, как вы

Сегменты
Чтобы понять значение указателя AT,
в верхнем правом углу цветного
стрелка вверх" имеет код
Просматривая листинг ROM BIOS, мы
выводящей эим символя на дисплей.
Кроме того, этот размер может
Обратите внимание, что сегмент PSP
В нашем примере на Фиг.
в первых же свободных участках
При втором методе распределиня памяти

Структуры
генерация данных происходит при вызове
Установка DS на сегмент
Чтение второй записи из
приведена очень простая программа,
завершает процедуру замены значений полей
Здесь снова модифицируются первые три
выделяет один из разделов этой

Записи
46 49 47 36 2D
записи присваивается имя DATE_WORD.
а запись DATE_WORD формирует эту
В данном примере не выполняется
Имеется также возможность изменить эти
различных полей записи DATE_WORD имеют
DS файтически указывает на
И последнее замечание об использовании

Работа 8087

Арифметические команды
и не только четыре основных
Так как данные из вершины
это короткое целое или целое

Десять в степени X
9B D9 2E 0002
используется всего три элемента стека,
будет положительным числом, что также

Форматы действительных чисел
и коротких действительных чисел показана
положительное число, которое здесь может

Assembler для начинающих

Изображение чисел с плавающей точкой
20 20 20 20 20
9B D9 2E 0002
9B DA 0E 001A
Эта программа печатает две десятичные
Печать одной десятичной цифры из
которая содержит целое число 108)

Команды пересылки данных
9B DF 06 0000
но не может знать, является
встроенный обработчик особой ситуации пометит
может иметь длину два, три
в качестве операнда только другой
9B 2E: D9 2E 0000

Команды сравнения
Сопроцессор 8087 помещает флаги состояния
о том, что нужно удалить
можно определить какое из чисел
а не только нормализованные числа
достижении другого предела представления чисел

Команды управления
Мы уже рассмотрели управляющее слово
байтовых регистров, состояние содержит 94
самый правый младший бит

Квадратное уравнение
Вычисление корней квадратного уравнения
Вычисление корней квадратного уравнения

Хотя физически микросхема 8087 представляет
Команды сопроцессора 8087 должны рассматриваться
внутри сопроцессора 8087 не произошло,

Определение действительных чисел
представлении программист сможет легко, используя

Перед тем, как мы окончим
и логика программы будет отлажена,
а это эквивалентно сдвигу десятичной
в программу DEBUG, так что

Представление данных с плавающей точкой
Десятичная точка показывает границу между
в которую нужно возвести 10
случае вычисляется мантисса, затем она
В этом случае вся мантисса
количества бит порядка не увеличивает

распространенных операций научит вас применять

микросхема 8087 выполняет арифметическую команду,
в микропроцессоре 8088, микросхеме 8087
но не замещает ни одну

Регистровый стек
Регистровая труктура микросхемы INTEL
и все команды загрузки помешают

Синус угла
A8 E8 AA AE AC
Опеределение того, что нужно
В первой части программы происходит
Это означает, что даже если
должна ли она использовать остаток

Слово состояния
Формат слова состояния INTEL

Степени десяти
регистровый стек сопроцессора 8087, освобождая
48 20 20 20
9B DF 06 0058
30 31 32 33 34
Вам нужно посмотреть часть программы

Степенные и тригонометрические функции
Эта функция вычисляет отношение, равное
величины угла, это оказывается необходимым
Другие тригонометрические функции можно вычислить

Микросхема 8087 имеет расширенный набор
битовых целых чисел используется оператор
Незначащие биты; 8087 их игнорирует
микропроцессора 8088 допускают одновременно только
ГДБДБДДВДВДВДДДДґ і 
ГДДДДДДДДДДДДДДДґ С 
Целочисленные форматы данных сопроцессора

Управляющее слово
Формат управляющего слова INTEL
Сопроцессор 8087 также дает возможность
особой ситуации от микросхемы 8087

Системное оборудование

Адаптер цветного графического монитора

Адаптер дисковода
в отличие от микросхемы 6845,
Чтение состояния из контроллера
Каждое действие, выполняемое контроллером дисковода,
программа прочитает всю информацию состояния

Адаптер монохромного дисплея и принтера
из 2000 позиций экрана. Первый
Горизонтальный сдвиг
делает этот горизонтальный сдвиг

Адаптер параллельного принтера
проверяет состояние, чтобы выводить следующий
Один из управляющих битов порта

Адаптер синхронных коммуникаций
вывода платы адаптера равен 3F8H,
Делитель частоты для скорости 300
Первая часть программы примера инициализирует
Обработка прерываний от последовательного
Программа обработки прерываний от последовательного
Оставшиеся две части примера посылают

Адаптер управления играми
Адаптер управления играми
Последняя часть программы на Фиг.

А теперь рассмотрим цвета, которые

Динамик
Цикл ожидания, во время
с выводным портом микросхемы 8255
разъемом для подключения клавиатуры, имеется
включает прямое управление динамиком,
в системе. Микросхема 8253 фирмы
На самом деле, вы услышите
Assembler для начинающих

Графический режим
в разных концах графической памяти.

Графика высокого разрешения

Клавиатура
показаны уровни прерываний каждого
Уровни прерываний для микросхемы
килобайте памяти. IBM PC отображает
Обратите внимание, что первая команда,
Обработчик прерывания читает код клавиши,
выдаваемого микропроцессору 8088. Обработчик прерывания
и отпускания клавиши, программа может

Прямой доступ у памяти
Каждый канал ПДП имеет два
Открыть для прямого доступа канал
байт данных. Контроллер дисковода использует

Системное оборудование

Текстовый режим
Если вы сравните байт атрибута
контроллер ЭЛТ 6845 фирмы Motorola.
и другие регистры. Большинство из
R7 і  Поз. вертикальной
с помощью утилиты DEBUG, то
на ней находится только начало
на регистр начала
Программа управления цветным дисплеем
Программа управления цветным дисплеем
Регистр выбора цвета находится по
что эквивалентно заполнению экрана около

Видеоадаптеры
Возможности системы

Время суток
точности нужное число раз. Это
в регистре AX значение счетчика
части программы этот канал таймера
таймера отмечается переход от низкого
значение прочитанное вторым оказалось численно
не играют роли, когда счетчик
с разрешения фирмы Intel; приоритет
Если вы хотите измерять события
При организации задержек через таймер

Замечания по листингу ROM BIOS

Блоки параметров
Чтение и запись символов

Данные клавиатуры
в IBM PC любые символы,
нажатой раньше других. Переменная BUFFER_TAIL
Если нет, цикл продолжается. Если

Дискета
Дисплей
Драйверы доступа

Функции ввода-вывода дисплея
проверки битов поля EQUIP_FLAG, которые
Фирма IBM опубликовала методы смены
монохромного дисплея, вы сможете сделать

Assembler для начинающих
вы пишите программы, которые будут
BIOS состоит из нескольких различных

Графика

Кассета
потребовалось сигналу кассеты, чтобы перейти
Фирма IBM выбрала размер блока,
Клавиатура

Команда форматирования
00 00 07 02 00
номера CHRN контроллер помещает на
DB 10, 0, 3,

Команда проверки
Команды чтения и записи
Область данных ROM BIOS
Области данных дисплея

Области данных драйвера BIOS дискеты
Операция рекалибровки играет важную роль
В тексте программы обслуживания дисководов

Прерывания ROM BIOS
Принтер и асинхронные коммуникации
имеющая порт печатающего устройства по
параметрах линии связи. Детали кода
Проверка появления символа позволит вам

Процедура BIOS клавиатуры изнутри
Команда REPNE SCASB, используемая после

Процедуры пользователя
Прогарммы драйверов устройств

Самотестирование при включении питания
Способ запуска процедуры POST также
в этом уверенным, лучше делать

Сдвиг изображения
программа BIOS очищает экран. Это

Системный сервис
в часе. Чтобы определить минуты,
Когда значение переменной MOTOR_COUNT достигает

Текст в графических режимах
выдачи на экран символов, которые

Установка режима
Выдача на телетайп
Замечания по листингу ROM BIOS

Расширение системы BIOS

Assembler для начинающих

Компилируемые языки высокого уровня
выходом компилятора является объектный файл,
Вспомним пример для сопроцессора 8087,
Вызов BIOS для получения даты
Стек для вызова процедуры

Процедура Бэйсика BLOAD
для вывода на принтер образа
Эта функция считывает восемь рядов
Чтение цвета точки из памяти
Переход на следующую строку на
к этой процедуре из программы,
допускающего выравнивание по границе параграфа.
NV UP DI PL
для программы DEBUG выдача содержимого

Процедуры на языке Ассемблера

Расширение системы BIOS
Расширение системы BIOS
Возврат программы в DOS с сохранением ее резидентности
предназначена для обслуживания буфера печати.
Место для хранения исходного вектора
Эта подпрограмма управляет вызовом прерывания
Эта программа вызывает 4660 раз
Это выполняется один раз на
в примере программа может облегчить
DOS изымает эту область из
Она управляется прерыванием от таймера.
нижних адресах памяти заменяются новыми,
поместив часть кода от команды
сохраненного вектора прерываний печати. Можно
Интересно рассмотреть работу процедуры TIMER_HANDLER
в 256 раз было выбрано
то как она сможет сообщить

Вставка короткой программы
Процедура сдвига изображения для
байтах от вершины стека. Если
на что следует обратить внимание,
по Бейсику, можно найти адрес

Загрузка в верхнюю часть памяти
перехватывается непосредственно после процедуры самоконтроля
в которое заносится загрузчик
Сегментная часть адреса нового
8E E8 A8 A1 AA
E2 A5 20 AD A0
Вычисление адреса расположения требуемой записи
В регистре CX сегментная часть
Проверка на запись поверх этой
в оперативной памяти. Мы возьмем
Затем POST передает управление по
После чтения процедуры драйвера устройства,
дорожки 0) дискеты, находящейся
Данный пример показывает, как реализовать
UP EI PL NZ NA

Заключение

Заключение