Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
379727.doc
Скачиваний:
37
Добавлен:
22.09.2019
Размер:
1.92 Mб
Скачать

34. Системный (ассемблерный) отладчик ос ms-dos - debug. Интерактивные типы отладчиков.

Отладчик (Debugger) - это программа, позволяющая увидеть ход выполнения отлаживаемой программы, менять содержимое регистров, памяти и т.д в процессе выполнения. Используется для исследования алгоритма работы программ, обнаружения ошибок. Под отладчиком можно увидеть результат выполнения команд процессора, функций ОС, что, вместе с документацией, очень полезно для обучения Assembler'у. Хорошое владение отладчиком особо необходимо начинающему программисту, т.к большую часть времени создания программы будет занимать ее отладка.

Программа-отладчик DEBUG является очень важным и необходимым инструментом для изучения работы ЭВМ, поставляемым в составе DOS. Программа DEBUG позволяет осуществлять три вида действий в отношении содержимого ПЗУ и ОЗУ:

1) выборку произвольного участка памяти и отображение его содержимого в двух форматах:

- шестнадцатеричный / ASCII;

- формат не связанный с деассемблированием;

2) запись программ на машинном языке или на языке ассемблера и их выполнение;

3) исследование и отладку программ, хранящихся на диске или в памяти.

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

Деассемблирование - это процесс трансляции или преобразования инструкций машинного языка, представленных в абсолютном шестнадцатеричном виде в символическую нотацию языка ассемблера.

Типы отладчиков.

Существуют следующие основные типы отладчиков:

• Ring3 отладчик: Отладчики этого типа, как правило, входят в пакет с компилятором. Представляют из себя обычную прикладную программу. Обладают очень ограниченной функциональностью. Позволяют отлаживать только прикладные программы. В TASM - TD (Turbo Debugger), В MASM - CodeView.

• Ring0 отладчик: Отладчики этого типа являются Ring0 драйверами ОС, поэтому имеют неограниченные возможности по управлению компьютером (доступ к памяти, регистрам, портам ввода-вывода и т.д). Позволяют отлаживать всё: прикладные программы, драйверы и т.д. Лучшими считаются SoftICE и KD.

35. Ассемблер для микропроцессоров с архитектурой intel 80x86. Общая характеристика языка, основные особенности и возможности. Инструментальные системы для разработки программ на языке Ассемблера.

Язык ассемблера представляет собой машинный язык в символической форме, которая более понятна и удобна человеку.

Язык ассемблера микропроцессора Intel 8086 является довольно сложным, что в первую очередь объясняется сегментной организацией памяти и одновременной адресацией четырех сегментов. В языке имеется более 100 базовых символических команд, в соответствии с которыми ассемблер генерирует более 3800 машинных команд. Кроме того, в распоряжении программиста имеется более 20 директив, предназначенных для распределения памяти, инициализации переменных, условного ассемблирования и т.д.

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

Операторы в исходной программе классифицируются как командные операторы, операторы распределения данных и директивы ассемблера.

Командные операторы определяют генерируемые ассемблером машинные команды; они содержат мнемонику и, при необходимости, один или два операнда. Каждый командный оператор порождает одну машинную команду, формат которой зависит от способа задания операндов.

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

Директивы ассемблера содержат специальные указания для ассемблирующей программы и сами по себе не порождают никаких машинных кодов.

Ассемблер

Языки программирования компьютеров делятся на 2 основные группы:

1) языки низкого уровня;

2) языки высокого уровня.

К языкам низкого уровня относятся языки Ассемблера. Свое название они получили от имени системной программы Ассемблер, которая преобразует исходные программы, написанные на таких языках, непосредственно в коды машинных команд. Термин "Ассемблер" произошел от английского слова assembler (сборщик частей в одно целое). Частями здесь служат операторы, а результатом сборки последовательность машинных команд. Процесс сборки называется ассемблированием.

Язык Ассемблера объединяет в себе достоинства языка машинных команд и некоторые черты языков высокого уровня. Ассемблер обеспечивает возможность применения символических имен в исходной программе и избавляет программиста от утомительного труда (неизбежного при программировании на языке машинных команд) по распределению памяти компьютера для команд, переменных и констант.

Ассемблер позволяет также гибко и полно использовать технические возможности компьютера, как и язык машинных команд. Транслятор исходных программ в Ассемблере проще транслятора, требующегося для языка программирования высокого уровня. На Ассемблере можно написать столь же эффективную по размеру и времени выполнения программу, как и программу на языке машинных команд. Это достоинство отсутствует у языков высокого уровня. Этот язык часто применяют для программирования систем реального времени, технологическими процессами и оборудованием, обеспечение работы информационно-измерительных комплексов. К таким системам обычно предъявляются высокие требования по объему занимаемой машинной памяти. Часто язык Ассемблера дополняется средствами формирования макрокоманд, каждая из которых эквивалентна целой группе машинных команд. Такой язык называют языком макроассемблера. Применение мак "строительных" блоков и приближает язык Ассемблера к языку высокого уровня.

Ассемблер машинно-зависимый язык, т. е. он отражает особенности архитектуры конкретного типа компьютера. Исходная программа, написанная на ассемблере, состоит из одного или нескольких исходных модулей, а каждый модуль – из операторов.

Специфические особенности языка

Ассемблер является языком программирования низкого уровня, составленная на нем программа представляет собой последовательность команд конкретной ЭВМ, чаще конкретного семейства ЭВМ, записанных в некой условной мнемонической форме. Именно машинная ориентация определяет достоинства и недостатки этого языка.

Неоспоримым достоинством ассемблера является возможность составления программ, рационально использующих все особенности системы команд конкретной ЭВМ. Он предоставляет неограниченные возможности для различного рода трюков (в хорошем смысле этого слова), тут все зависит от профессиональных навыков программиста и его изобретательности.

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

Очевидным недостатком является низкий уровень абстрагирования от особенностей конкретной ЭВМ, необходимость знать и учитывать эти особенности. В то время как при работе с языками высокого уровня программист может полностью сосредоточить свое внимание на особенностях реализуемого алгоритма.

Что же касается инструментальных средств для разработки приложений на ''чистом'' ассемблере, то в последнее время появились очень мощные приложения такого рода, что вынуждает по-другому взглянуть на проблему. Из таких инструментальных средств проектирования можно выделить в первую очередь макроассемблер MASM32, а также AsmStudio и NASM. Эти и другие инструменты разработки программ имеют самый современный графический интерфейс. Не следует забывать и о том, для ассемблера разработаны многочисленные библиотеки функций, приближающие этот язык по своим функциональным возможностям к высокоуровневым средствам разработки приложений.

Turbo Assembler (TASM) — программный пакет компании Borland, предназначенный для разработки программ на языке ассемблера для архитектуры x86. Кроме того, TASM может работать совместно с трансляторами с языков высокого уровня фирмы Borland, такими как Turbo C и Turbo Pascal. Как и прочие программные пакеты серии Turbo, Турбо Ассемблер больше не поддерживается.

TASM до сих пор используется для обучения программированию на ассемблере под архитектуру x86.[источник не указан 487 дней] Многие находят его очень удобным и продолжают его использовать, расширяя набором дополнительных макросов.[источник не указан 487 дней]

Пакет TASM поставляется вместе с компоновщиком Turbo Linker и порождает код, который можно отлаживать с помощью Turbo Debugger.

По умолчанию TASM работает в режиме совместимости с другим распространённым ассемблером — Microsoft Macro Assembler, то есть TASM умеет транслировать исходники, разработанные под MASM. Кроме того, TASM имеет режим IDEAL, улучшающий синтаксис языка и расширяющий его функциональные возможности.

Microsoft Macro Assembler (MASM) — ассемблер для процессоров семейства x86. Первоначально был произведён компанией Microsoft для написания программ в операционной системе MS-DOS и был в течение некоторого времени самым популярным ассемблером, доступным для неё. Это поддерживало широкое разнообразие макросредств и структурированность программных идиом, включая конструкции высокого уровня для повторов, вызовов процедур и чередований (поэтому MASM — ассемблер высокого уровня). Позднее[когда?] была добавлена возможность написания программ для Windows. MASM — один из немногих инструментов разработки Microsoft, для которых не было отдельных 16- и 32-битных версий.

NASM (Netwide Assembler) — свободный (LGPL и лицензия BSD) ассемблер для архитектуры Intel x86. Используется для написания 16-, 32- и 64-битных программ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]