Реклама:

Рассматриваемый трассер/отладчик адаптирован для обычного (VT100) терминала 24 X 80 со стандартным для терминалов набором ANSI-команд. В машинах UNIX и Linux этим требованиям обычно отвечает эмулятор терминала в системе X-window. В машинах Windows для этой цели с файлами инициализации системы загружается драйвер ansi.sys; процедура загрузки которого будет описана далее. Структуру окна трассера мы уже показывали. Как видно из рис. В.4, экран трассера разделен на семь секций.

Трассер

Рис. В.4. Секции окна трассера

В верхней левой части окна находится секция процессора; в ней содержимое регистров общего назначения указывается в десятичном представлении, всех остальных регистров - в шестнадцатеричной. Поскольку численное значение счетчика команд не слишком информативно, строкой ниже определяется положение в исходном коде программы по отношению к предыдущей глобальной метке. Над полем счетчика команд показаны пять кодов условий. Переполнение обозначается символом и, флаг направления - символом > (увеличение) или < (уменьшение). Флаг знака может быть выражен символами п (отрицательные значения) или р (нуль и положительные значения). Установленный нулевой флаг обозначается как 2, а установленный флаг переноса - как с. Знак - означает сброшенный флаг.

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

Под секцией процессора указываются последние точки вызова подпрограмм в исходном коде. Еще ниже находится секция команд трассера, где предыдущая команда указывается сверху, а курсор команды - снизу. Имейте в виду, что каждая команда должна завершаться символом возврата каретки (на клавиатурах ПК он вводится нажатием клавиши Enter).

В нижней секции могут находиться шесть элементов глобальной памяти данных. Каждый такой элемент начинается с позиции, отсчитываемой относительно той или иной метки, за которой следует абсолютная позиция в сегменте данных. Далее ставится двоеточие и выводится 8 байт в шестнадцатеричном представлении. Следующие 11 позиций зарезервированы для символов, за которыми могут следовать четыре слова в десятичном представлении. Байты, символы и слова представляют одну и ту же область памяти, но для символьного выражения предусмотрено три дополнительных байта. Это решение обусловливается тем, что изначально не ясно, в каком виде будут представлены данные: в виде целых чисел со знаком или без знака либо в виде строки.

Средняя правая секция отводится под ввод и вывод. В первой строке следует вывод ошибок трассера, вторую строку занимает ввод, а несколько последующих - вывод. Выводу ошибок предшествует буква Е, вводу - буква /, стандартному выводу - символ >. В поле ввода стрелка (->) обозначает следующий в порядке чтения указатель. При вызовах read или getchar следующее введенное в командной строке трассера выражение попадает в поле ввода. В этом случае необходимо завершить ввод нажатием клавиши Enter. Необработанная на данный момент часть строки находится после стрелки (->).

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

1. Файл с исходным кодом на языке ассемблера (pr.s).

2. Файл с объединенным исходным кодом (рг.$).

3. Файл загрузки (рг.88).

4. Предустановленный файл стандартного ввода (pr.i).

5. Предустановленный файл с командами трассера (pr.t).

6. Файл для компоновки кода на языке ассемблера с файлом загрузки (рг.#).

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

Некоторые отличия от других ассемблеров 8088 || Оглавление || Команды трассера