Структура таблиц Ассемблера - раздел Образование, Свойства операторов работы с экраном Структура Таблиц Ассемблера Выбирается Таким Образом, Чтобы Обеспечить Максим...
Структура таблиц Ассемблера выбирается таким образом, чтобы обеспечить максимальную скорость поиска в них.
Таблицы команд и директив являются постоянной базой данных. Они заполняются один раз — при разработке Ассемблера, а затем остаются неизменными.
Эти таблицы целесообразно строить как таблицы прямого доступа с функцией хеширования, осуществляющей преобразование мнемоники в адрес записи в таблице.
Имеет смысл постараться и подобрать функцию хеширования такой, чтобы в таблице не было коллизий. Поскольку заполнение таблицы происходит один раз, а доступ к ней производится многократно, эти затраты окупаются.
Таблица символов формируется динамически — в процессе работы 1-го прохода. Поиск же в этой таблице осуществляется как в 1-м проходе (перед занесением в таблицу нового имени, проверяется, нет ли его уже в таблице).
Построение этой таблицы как таблицы прямого доступа не очень целесообразно, так как неизбежно возникновение коллизий. Поэтому поиск в таблице символов может быть дихотомическим, но для этого таблица должна быть упорядочена.
Поскольку новые имена добавляются в таблицу «по одному», и после каждого добавления упорядоченность таблицы должна восстанавливаться, целесообразно применять алгоритму сортировки, чувствительные к исходной упорядоченности данных.
Эти же соображения относятся и к другим таблицам, формируемым Ассемблером в процессе работы. При больших размерах таблиц и размещении их на внешней памяти могут применяться и более сложные (но и более эффективные) методы их организации, например — B+-деревья.
Все темы данного раздела:
Команда прерывания INT
Ранее мы имели дело с программами, в которых данные oпределялись в операндах команд (непосредственные данные) или инициализировались в конкретных полях программы. Число практических применений таки
Установка курсора
Экран можно представить в виде двумерного пространства с адресуемыми позициями в любую из которых может быть установлен курсор. Обычный видеомонитор, например, имеет 25 строк (нумеруемых от 0 до 24
Очистка экрана
Запросы и команды остаются на экране пока не будут смещены в результате прокручивания («скроллинга») или переписаны на этом же месте другими запросами или командами.
Когда программа начина
Использование символов возврата каретки, конца строки и табуляции для вывода на экран
Один из способов получения более эффективного выводе на экран — использование управляющих символов возврата каретки, перевода строки и табуляции:
Десятичные ASCII Шестнадцатерич
Байт атрибутов
Байт атрибутов в текстовом (не графическом) режиме определяет характеристики каждого отображаемого символа. Байт-атрибут имеет следующие 8 бит:
Фон Текст
Атрибут: BL R G B I R G B
Эффект выделения
Фон Текст
RGB RGB
Неотображаемый (черный по черному) 000 000
Подчеркивание (не для цвета) 000 001
Нормальный (белый по черному) 000 111
Инвертированный
Расширенный ASCII код
ASCII-коды от 128 до 255 (шест. 80-FF) представляют собой ряд специальных символов полезных при формировании запросов, меню, специальных значков с экранными атрибутами. Например, используя cледующи
Функциональные клавиши
Клавиатура располагает тремя основными типами клавишей:
1. Символьные (алфавитно-цифровые) клавиши: буквы от a до z, цифры от 0 до 9, символы %, $, # и так далее.
2. Функциональны
Скэн-коды
Клавиатура имеет по две клавиши для таких символов как *, + и -. Нажатие «звездочки», например, устанавливает код символа шест.2A в регистре AL и один из двух скэн-кодов в регистре AH в зависимости
Текстовой режим
Текстовой режим предназначен для обычных вычислений с выводом букв и цифр на экран. Данный режим одинаков для черно-белых (BW) и для цветных мониторов за исключением того, что цветные мониторы не п
Байт-атрибут
Текстовой режим допускает использование байта атрибута. Цвет на экране сохраняется до тех пор, пока другая команда не изменит его.
Для установки цвета можно использовать в команде INT 10H
Комментарии в программах на Ассемблере
Использование комментариев в программе улучшает ее ясность, oсобенно там, где назначение набора команд непонятно.
Комментаpий всегда начинаются на любой строке исходного модуля с си
Формат кодирования
Основной формат кодирования команд Ассемблера имеет следующий вид:
[метка] команда [операнд(ы)]
Метка (если имеется), команда и операнд (если имеется) pазделяются
Директивы
Ассемблер имеет ряд операторов, которые позволяют упpавлять процессом ассемблирования и формирования листинга.
Эти операторы называются псевдокомандами или директивами.
Они действ
Директива PAGE
В начале программы можно указать количество строк, распечатываемых на одной странице, и максимальное количество символов на одной строке. Для этой цели cлужит директива PAGE. Следующей директивой у
Директива TITLE
Для того, чтобы вверху каждой страницы листинга печатался заголовок (титул) программы, используется диpектива TITLE в следующем формате:
TITLE текст
Рекомендуется в качестве текст
Директива SEGMENT
Любые ассемблерные программы содержат по крайней мере один сегмент — сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных для определения данных. Асcемблер
Объединение
Этот элемент определяет объединяется ли данный сегмент с другими сегментами в процессе компоновки после ассемблирования. Возможны следующие типы объединений: STACK, COMMON, PUBLIC, AT выражение и M
Директива PROC
Сегмент кода содержит выполняемые команды программы. Кроме того этот сегмент также включает в себя одну или несколько процедур, определенных директивой PROC. Сегмент, содержащий только одну процеду
Директива ASSUME
Процессор использует регистр SS для адресации стека, регистр DS для адресации сегмента данных и регистр CS для адресации cегмента кода.
Ассемблеру необходимо сообщить назначение каждого се
Директива END
Директива ENDS завершает сегмент, а директива ENDP завершает процедуру. Директива END в свою очередь полностью завершает всю программу:
Директива Операнд END [имя_процедуры
Память и регистры
Рассмотрим особенности использования в командах имен, имен в квадратных скобках и чисел. В следующих примерах положим, что WORDA определяет слово в памяти:
MOV AX,BX ;Переслать содержимое
Инициализация программы
Существует два основных типа загрузочных программ: EXE и COM.
Рассмотрим требования к EXE-программам. DOS имеет четыре требования для инициализации ассемблерной EXE-программы:
Ввод программы
Исходный текст программы, предназначенный для ввода с помощью текстового редактора можно ввести при помощи DOS EDLIN или другого текстового редактора.
Для ввода исходной программы наберите
Подготовка программы для выполнения
После ввода на диск исходной программы необходимо проделать два основных шага, прежде чем программу можно будет выполнить. Сначала необходимо ассемблиpовать программу, а затем выполнить компоновку.
Ассемблирование программы
Для того, чтобы выполнить исходную ассемблерную программу, необходимо прежде провести ее ассемблирование и затем компоновку. На дискете с ассемблерным пакетом имеются две версии aссемблера. ASM.EXE
Двухпроходный Ассемблер
В процессе трансляции исходной программы Ассемблер делает два просмотра исходного текста, или два прохода. Одной из основных причин этого являются ссылки вперед, что происходит в том случае, когда
Компоновка программы
В случае, если в результате ассемблирования не обнаружено ошибок, то cледующий шаг — компоновка объектного модуля. Файл имяпрограммы.OBJ содержит только машинный код в шестнадцатеричной форме. Так
Выполнение программы
После ассемблирования и компоновки программы можно (наконец-то!) выполнить ее. В случае, если EXE-файл находится на дисководе C, то выполнить ее можно командой:
C:имя программы.EXE или C:и
Файл перекрестных ссылок
В процессе трансляции Ассемблер создает таблицу идентификаторов (CRF), которая может быть представлена в виде листинга перекрестных ссылок на метки, идентификаторы и переменные в п
Определение длины команды
Эта задача может решаться существенно разным образом для разных языков. В языках некоторых Ассемблеров мнемоника команды однозначно определяет ее формат и длину (S/390, все RISC-процессоры). В этом
Листинг
Строка листинга печатается в конце каждой итерации обработки команды. Строка листинга 1-го прохода содержит: номер оператора, значение счетчика адреса (только для команд и директив, приводящих к вы
Некоторые структуры данных 1-го прохода
Таблица команд содержит одну строку для каждой мнемоники машинной команды. Ниже приведен пример структуры такой таблицы для простого случая, когда мнемоника однозначно определяет формат и длину ком
Двухпроходный Ассемблер — второй проход
Обычно 2-й проход Ассемблера читает исходный модуль с самого начала и отчасти повторяет действия 1-го прохода (лексический разбор, распознавание команд и директив, подсчет адресов). Это, однако, ск
OGR Установка адреса
Операндом директивы является числовая константа или выражение, вычисляемое при ассемблировании. Как правило, Ассемблер считает, что первая ячейка обрабатываемой им программы располагается по адресу
START/ SECT
Начало модуля или программной секции. Операндом директивы является имя секции. Этой директивой устанавливается в 0 счетчик адресов программы. Программа может состоять из нескольких программных секц
Одно- и многопроходный Ассемблер
Мы показали, что в двухпроходном Ассемблере на 1-м проходе осуществляется определение имен, а на втором — генерация кода.
Можно ли построить однопроходный Ассемблер? Трудность состоит в то
Команда JMP
Большинство программ содержат ряд циклов, в которых несколько команд повторяются до достижения определенного требования, и различные проверки, определяющие, какие из нескольких действий следует вып
Безусловный переход
JMP
Цикл:
LOOP
Условный переход:
J nnn (больше,меньше,равно)
Вызов процедуры:
CALL
Команда LOOP
Команда JMP реализует бесконечный цикл. Но более вероятно подпрограмма должна выполнять определенное число циклов. Команда LOOP, которая служит для этой цели, использует начальное значение в регист
OF (Overflow Flag) — флаг переполнения
Фиксирует арифметическое переполнение, то есть, перенос вниз старшего (знакового) бита при знаковых арифметических операциях.
В качестве примера: команда CMP сравнивает два операнда и возд
Команды условного перехода
Команда LOOP уменьшает на единицу содержимое регистра CX и проверяет его: если не ноль, то управление передается по адресу, указанному в операнде. Таким образом, передача управления зависит от конк
Знаковые и беззнаковые данные
Рассматривая назначение команд условного перехода следует пояснить характер их использования. Типы данных, над которыми выполняются арифметические операции и операции сравнения определяют какими ко
Сегмент стека
Ниже буду рассмотрены только две команды, использующие стек, — это команды PUSH в начале сегмента кодов, которые обеспечивают возврат в DOS, когда EXE-программа завершается.
Естественно дл
Изменение строчных букв на заглавные
Существуют различные причины для преобразований между строчными и заглавными буквами. Например, вы могли получить файл данных, созданный на компьютере, который работает только с заглавными буквами.
Команды сдвига и циклического сдвига
Команды сдвига и циклического сдвига, которые представляют собой часть логических возможностей компьютера, имеют следующие свойства:
uобрабатывают байт или слово;
Команды сдвига
При выполнении команд сдвига флаг CF всегда содержит значение последнего выдвинутого бита.
Существуют следующие команды cдвига:
SHR ;Логический (беззнаковый) сдвиг вправо
Команды циклического сдвига
Циклический сдвиг представляет собой операцию сдвига, при которой выдвинутый бит занимает освободившийся разряд. Существуют следующие команды циклического сдвига:
ROR ;Циклический сдвиг вп
Организация программ
Ниже даны основные рекомендации для написания ассемблерных программ:
1. Четко представляйте себе задачу, которую должна решить программа.
2. Сделайте эскиз задачи в общих чертах и
Межсегментные вызовы
Примеры программ, рассматриваемых ранее, состояли из одного шага ассемблирования. Возможно, однако, выполнение программного модуля, состоящего из нескольких ассемблированных программ. В этом случае
Директива PUBLIC
Директива PUBLIC указывает Ассемблеру и компоновщику, что адрес указанного идентификатора доступен из других программ. Директива имеет следующий формат:
PUBLIC идентификатор [, ... ]
Компоновка программ на языке С и Ассемблере
Трудность описания связи программ на языке C и ассемблерных программ состоит в том, что различные версии языка C имеют разные соглашения о связях и для более точной информации следует пользоваться
Выполнение COM-программы
В отличие от EXE-файла, COM-файл не содержит заголовок на диске. Так как организация COM-файла намного проще, то для DOS необходимо «знать» только то, что тип файла — COM.
Загруженным в па
AL=0. Загрузка и выполнение
Данная операция устанавливает префикс программного сегмента для новой программы, а также адрес подпрограммы реакции на Cntrl/Break и адрес передачи управления на следующую команду после завершения
AL=3. Оверлейная загрузка
Данная операция загружает программу или блок кодов, но не создает PSP и не начинает выполнение.
Таким образом можно создавать оверлейные программы. Блок параметров адресуется по регистрово
Новости и инфо для студентов