Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Команда Объектный код команды ⇐ ПредыдущаяСтр 2 из 2
MOV AH,0 10110100 00000000
w
ADD BX,AX 00000011 11 011 000
Mod reg r/m D w
Кроме того, первый байт машинного кода может содержать бит d, который указывает направление потока данных между операндами. Если d=0, то поле reg определяет второй операнд, а поля mod и r/m – первый, иначе поле reg определяет первый операнд, а поля mod и r/m – второй. В последнем примере d=1 означает, что поле reg определяет первый операнд, а поля mod и r/m - второй. Операнды команды кодируется полями reg или mod,r/m. Поле reg предназначено для указания операнда с регистровым режимом адресации и содержит код регистра. Поле r/m предназначено для указания операнда с регистровым режимом адресации или с режимом адресации оперативной памяти. Если биты поля mod имеют значение 11, это значит, что операнд находится в регистре, т. е. биты r/m вместе с битом w определяют конкретный регистр. Кодирование регистров приведено в таблице 1. Если биты поля mod имеют значение 00,01,10 это значит, что операнд находится в оперативной памяти, т. е. поле r/m содержит код способа адресации оперативной памяти.
Таблица 1– Таблица соответствия кодов и мнемонических имен регистров
Значения битов mod имеют следующую интерпретацию: mod=00 – биты r/m задают абсолютный адрес, байт смещения отсутствует; mod=01 – биты r/m задают абсолютный адрес памяти и имеется один байт смещения; mod=10 – биты r/m задают абсолютный адрес памяти и имеется два байта смещения. Кодирование типов адресаций приведено в таблице 2.
Таблица 2– Таблица кодов адресации
В объектном коде команды, если используются операнды длиной в слово, сначала указывается младший байт, а затем – старший.
Например,
Команда Объектный код команды
MOV AX, 0123H 10111000 00100011 00000001 Младший старший младший старший Байт байт байт байт
В командах с одним операндом или в командах, когда второй операнд является непосредственным значением, первый операнд кодируется полями mod и r/m, а поле reg содержит дополнительные 3 бита кода операции.
Например,
Команда Объектный код команды
MUL DH 11111100 11 101 110
ТРЕБОВАНИЯ К ТРАНСЛЯТОРУ
Транслятор с языка Ассемблер должен:
– выявить ошибки в исходной программе; – распределить память; – перевести на машинный язык команды мнемокода и константы; – сформировать объектный код программы; – сформировать протокол трансляции (листинг).
Эти задачи трудно решить за один просмотр [3–7]. Поэтому, как правило, используются двухпросмотровые ассемблеры. При первом просмотре ассемблер просматривает исходную программу и строит таблицу идентификаторов, т.е. имен полей данных и меток, используемых в программе, и их относительных адресов. Кроме того, при первом проходе подсчитывается длина объектного кода, но сам объектный код не генерируется. При втором просмотре, ассемблер, используя таблицу идентификаторов, генерирует объектный код для каждой команды. В ходе трансляции ассемблер использует постоянные и временные таблицы. Постоянные таблицы составляются при разработке ассемблера, а временные создаются в ходе трансляции. Примером постоянной таблицы может служить таблица команд, в которой перечислены все мнемонические коды команд, типы операндов и их машинные эквиваленты, или таблица сообщений об ошибках, в которой фиксируется тип ошибки и соответствующий текст для вывода в файл-листинг. Множество и структура таблиц зависят от особенностей машины, языка Ассемблер и, наконец, от конкретной реализации транслятора. Однако, обязательной временной таблицей в любом ассемблере является таблица идентификаторов (имен), содержащая все имена, определенные в исходной программе и их характеристики: тип, значение, длину и т.д. Результатом работы транслятора с языка Ассемблер являются листинг и объектный код. Причем, если объектный код формируется только при отсутствии ошибок в тексте исходной программы, то листинг создается в любом случае. Листинг содержит не только исходный текст, но и, при отсутствии ошибок, машинный код команды в шестнадцатиричном формате, а также шестнадцатиричный адрес команды. Если же в исходном тексте команды есть ошибки, то, очевидно, объектный код команды не может быть сформирован, и листинг содержит подробную информацию об ошибках.
Общая схема обработки данных транслятором приведена на рисунке 4. Стрелками на рисунке представлены информационные и логические связи между блоками транслятора.
КОП – мнемонический код операции; ОП1 и ОП2 – операнды первый и второй соответственно.
ТРЕБОВАНИЯ К ОТЛАДЧИКУ
Современные системы программирования, как правило, имеют в своем составе специальные средства для облегчения процесса отладки программ, называемые отладчиками. Отладчики позволяют управлять процессом исполнения отлаживаемой программы и получать информацию о ее текущем состоянии или о содержимом памяти, изменять его, приостанавливать и вновь возобновлять исполнение программы. Все отладчики можно разделить на две группы: универсальные отладчики для работы на уровне машинного языка и специализированные отладчики, ориентированные на работу с определенным языком программирования высокого уровня. Очевидное достоинство универсальных отладчиков состоит в том, что с помощью одного и того же отладчика можно анализировать любую исполняемою программу. Недостатком же таких отладчиков является то, что от программиста требуется определенное знание машинного языка и способов адресации памяти. Основное достоинство отладчиков языков высокого уровня состоит в том, что ими гораздо легче пользоваться, т.к. доступ к переменной можно получить по ее имени, не задумываясь о том, с каким физическим адресом памяти она связана. Кроме того, использование отладчиков этого типа не требует знаний, в какие машинные коды преобразуется тот или иной оператор исходной программы. Недостатком же таких отладчиков является то, что они зависят от реализации самого языка высокого уровня. Как правило, они менее универсальны, поскольку не обеспечивают анализ машинных кодов, генерируемых компилятором. Как уже отмечалось выше, в настоящей работе рассматривается задача разработки универсального отладчика – эмулятора. На вход универсального отладчика поступает объектный код программы в заданном формате (см. п.2), и отладчик должен обеспечивать проверку правильности структуры объектного кода и выполнение команд программы. Кроме того, отладчик должен фиксировать ошибки исполнения команд (например, деление на ноль) и отслеживать недопустимые ссылки (передачу управления за пределы программы). Схема обработки данных отладчиком представлена на рисунке 5. Стрелками на рисунке обозначены информационные и логические связи между отдельными блоками отладчика.
Рисунок 5 – Схема обработки данных отладчиком.
ЗАДАНИЕ НА КУРСОВОЕ ПРОЕКТИРОВАНИЕ
Разработать программу транслятора для подмножества команд языка Ассемблера процессора i8086/8088. Транслируемая программа имеет следующий формат:
NAMESEG SEGMENT ORG выражение ... Область команд ... NAMEDATA DB DW ... Область данных ... NAMESEG ENDS END
В качестве признака завершения вычислений использовать команду INT 20H. В результате работы транслятора должны быть сформированы протокол трансляции и объектный код программы. Протокол трансляции представляется файлом-листингом, в котором содержится объектный код и мнемонический код команд, сообщения об ошибках, информация о результатах трансляции и т. д. Объектный код программы записывается в файл объектного кода и должен иметь следующий формат:
H запись-заголовок T тело E запись-конец
Здесь запись-заголовок имеет формат: H<Имя_сегмента><Длина_кода> запись-тело: T<адрес_кода><длина_кода><Код> запись-конец: E<точка_входа>
Коды команд и данных записать в виде строки, представляющей шестнадцатеричную константу.
Во всех вариантах реализовать обработку команды MOV и команд, определенных номером варианта (п. 4). Кроме того, во всех вариантах предусмотреть обработку директив:
1) SEGMENT, ENDS, END; 2) ORG, OFFSET; 3) DB; 4) DW.
Разработать среду отладчика-эмулятора, в которой предусмотреть следующие возможности: 1) загрузка объектного кода в память; 2) вывод состояния регистров, регистра флагов и заданной области памяти; 3) вывод реассемблированного текста программы; 4) пошаговое выполнение программы. Исходными данными для отладчика являются объектный код и значения сегментных регистров. Результат работы отладчика – состояния регистров и оперативной памяти после выполнения каждой команды, отображаемые на экране компьютера.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-01-23; просмотров: 500; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.6.77 (0.139 с.) |