Самоучители для программиста

         

Internet/Network



Internet/Network -









Использование контекстного меню датчика



Использование контекстного меню датчика


При щелчке правой кнопкой по датчику появляется контекстное меню, которое дает доступ к элементам управления и настойки датчиков.

Properties - Свойства датчика
Update - Обновить
Reset - Сброс
Remove - Удалить датчик
Sensor Information - Информация о датчике
Sensor History Window - Журнал датчика
Open ... - Открытие приложения, связанного с работой датчика
What's This? - Получение справки о датчике
Add Sensor - Добавить датчик
File - Команды для работы с текущей конфигурацией датчиков
View - Настройка внешнего вида программы
Utilites - Запуск программ, входящих в Norton Utilites 2002
Close - Выход из программы

Рассмотрим некоторые из этих команд подробнее.

Команда Properties (Свойства)

После щелчка по этому пункту контекстного меню откроется диалоговое окно Properties for ... (Свойства для...). Для разных датчиков вид окна (число вкладок и перечень элементов управления) может различаться.
Обычно окно содержит три вкладки.










Изменение файлов конфигурации



Изменение файлов конфигурации



Кроме системного реестра редактор Norton Registry Editor позволяет контролировать и изменять системные файлы конфигурации .INI. К трем основным файлам, изначально присутствующим в структуре разделов (control.ini, system.ini, win.ini), можно добавить другие с помощью команды File>Load INI File (Файл>Загрузить INI-файл). Выбранный файл появится в структуре разделов. Обратная операция происходит по команде File>Unload INI File (Файл>Выгрузить INI-файл). Порядок работы с файлами конфигурации тот же, что и с разделами, и с параметрами Реестра.


























Элементы управления



Элементы управления










Эта программа предназначена для




Эта программа предназначена для сравнения файлов, имеющих текстовый формат. Она предназначена, в первую очередь, для работы с файлами конфигурации и файлами Реестра, представленными в формате .REG. Программу Norton File Compare можно использовать совместно с программой Norton Registry Tracker для отслеживания и отмены изменений в системных файлах и настройках Реестра Windows.









Эта служебная программа предназначена




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









Этапы подготовки программы



Этапы подготовки программы

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

Определение (ГОСТ)
Программный модуль - программа или функционально завершенный фрагмент программы, предназначенный для хранения, трансляции, объединения с другими программными модулями и загрузки в оперативную память.

При выборе модульной структуры должны учитываться следующие основные соображения: Функциональность - модуль должен выполнять законченную функцию Несвязность - модуль должен иметь минимум связей с другими модулями, связь через глобальные переменные и области памяти нежелательна Специфицируемость - входные и выходные параметры модуля должны четко формулироваться

На рисунке показаны этапы, которые проходит программа от своего написания до выполнения

Программа пишется в виде исходного модуля, на рисунке - файл ИМ.

Определение (ГОСТ)
Исходный модуль - программный модуль на исходном языке, обрабатываемый транслятором и представляемый для него как целое, достаточное для проведения трансляции.

Первым (не для всех языков программирования обязательным) этапом подготовки программы является обработка ее Макропроцессором (или Препроцессором). Макропроцессор обрабатывает текст программы и на выходе его получается новая редакция текста (на рис. - ИМ'). В большинстве систем программирования Макропроцессор совмещен с транслятором, и для программиста его работа и промежуточный ИМ' "не видны". Следует иметь в виду, что Макропроцессор выполняет обработку текста, это означает, с одной стороны, что он "не понимает" операторов языка программирования и "не знает" переменных программы, с другой, что все операторы и переменные Макроязыка (тех выражений в программе, которые адресованы Макропроцессору) в промежуточном ИМ' уже отсутствуют и для дальнейших этапов обработки "не видны". Так, если Макропроцессор заменил в программе некоторый текст A на текст B, то транслятор уже видит только текст B, и не знает, был этот текст написан программистом "своей рукой" или подставлен Макропроцессором.

Следующим этапом является трансляция.

Определение (ГОСТ)
Трансляция - преобразование программы, представленной на одном языке программирования, в программу на другом языке программирования, в определенном смысле равносильную первой.

Как правило, выходным языком транслятора является машинный язык целевой вычислительной системы. (Целевая ВС - та ВС, на которой программа будет выполняться.)

Определение (ГОСТ)
Машинный язык - язык программирования, предназначенный для представления программы в форме, позволяющей выполнять ее непосредственно техническими средствами обработки информации.

Трансляторы - общее название для программ, осуществляющих трансляцию. Они подразделяются на Ассемблеры и Компиляторы - в зависимости от исходного языка программы, которую они обрабатывают. Ассемблеры работают с Автокодами или языками Ассемблера, Компиляторы - с языками высокого уровня.

Определение (ГОСТ)
Автокод - символьный язык программирования, предложения которого по своей структуре в основном подобны командам и обрабатываемым данным конкретного машинного языка.

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

Определение (ГОСТ)
Язык высокого уровня - язык программирования, понятия и структура которого удобны для восприятия человеком.

Определение (ГОСТ)
Объектный модуль - программный модуль, получаемый в результате трансляции исходного модуля.

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

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

Разрешение внешних ссылок выполняется на следующем этапе подготовки, который обеспечивается Редактором Связей (Компоновщиком). Редактор Связей соединяет вместе все объектные модули, входящие в программу. Поскольку Редактор Связей "видит" уже все компоненты программы, он имеет возможность обработать те места в объектных модулях, которые содержат внешние ссылки. Результатом работы Редактора Связей является загрузочный модуль.

Определение (ГОСТ)
Загрузочный модуль - программный модуль, представленный в форме, пригодной для загрузки в оперативную память для выполнения.

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

Возможен также вариант, в котором редактирование связей выполняется при каждом запуске программы на выполнение и совмещается с загрузкой. Это делает Связывающий Загрузчик. Вариант связывания при запуске более расходный, т.к. затраты на связывание тиражируются при каждом запуске. Но он обеспечивает: большую гибкость в сопровождении, так как позволяет менять отдельные объектные модули программы, не меняя остальных модулей; экономию внешней памяти, т.к. объектные модули, используемые во многих программах не копируются в каждый загрузочный модуль, а хранятся в одном экземпляре.

Вариант интерпретации подразумевает прямое исполнение исходного модуля.

Определение (ГОСТ)
Интерпретация - реализация смысла некоторого синтаксически законченного текста, представленного на конкретном языке.

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

Примеры интерпретаторов: языки процедур (sell, REXX), JVM.

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

Типовое применение кросс-систем - для тех случаев, когда целевая вычислительная среда просто не имеет ресурсов, необходимых для подготовки программ, например, встроенные системы.

Программные средства, обеспечивающие отладку программы на целевой системе можно также рассматривать как частный случай кросс-системы.

Дальнейшая тематика курса соответствует плану намеченному в первой теме: мы будем последовательно рассматривать системные обрабатывающие программы, обеспечивающие подготовку программ.



Качественное расширение возможностей



Качественное расширение возможностей.

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



Комментарии макроопределения



Комментарии макроопределения

Если в тексте макроопределения имеются комментарии, то они переходят в макрорасширение так же, как и операторы машинных команд и директив Ассемблера. Однако, должна быть обеспечена и возможность употребления таких комментариев, которые не переходят в макрорасширение - комментарии, которые относятся не к самой программе, а к макроопределению и порядку его обработки. Такие комментарии должны обладать некоторым отличительным признаком. Возможны специальные директивы Ассемблера, определяющие режим печати комментариев макроопределения.



Let me choose which tests to run



Let me choose which tests to run (Выбрать выполняемые тесты самостоятельно), то откроется список тестов, полный перечень которых приведен в таблице.

Norton Registry: Registry Integrity Проверка системного реестра: общая структура и профили пользователей
Windows Registry Scan: ActiveX/COM Sections Проверка системного реестра: разделы ActiveX/COM
Windows Registry Scan: ActiveX/COM SubKey Sections Проверка системного реестра: записи ActiveX/COM
Windows Registry Scan: Application Paths Section Проверка системного реестра: пути доступа к приложениям
Windows Registry Scan: Device Drivers Section Проверка системного реестра: раздел драйверов устройств
Windows Registry Scan: Fonts Section Проверка системного реестра: раздел шрифтов
Windows Registry Scan: Help Section Проверка системного реестра: раздел справочной системы
Windows Registry Scan: Microsoft Shared Section Проверка системного реестра: раздел ресурсов общего доступа приложений Microsoft
Windows Registry Scan: Run Sections Проверка системного реестра: раздел запуска приложений
Windows Registry Scan: Sound Customization Sections Проверка системного реестра: раздел настройки звуковых устройств
Windows Registry Scan:Symantec Shared Section Проверка системного реестра: раздел ресурсов общего доступа приложений Symantec
Windows Registry Scan: Uninstall Section Проверка системного реестра: раздел деинсталляции приложений
Windows Registry Scan: VxD Section Проверка системного реестра: раздел VxD
Program Integrity Scan: Common Program Locations Проверка структуры программ (объектов Рабочего стола, Главного меню, раздела деинсталляции приложений, динамических библиотек и других ресурсов общего доступа)
Ms-DOS Program Shortcut Scan: C; Проверка параметров ярлыков программ MS-DOS
Shortcut Scan: C: Поиск неприсоединенных ярлыков


Щелчок на кнопке Analysis Agents (Агенты-анализаторы) открывает дополнительное окно, в котором можно выполнить настройку так называемых анализаторов, координирующих действия программы в случае обнаружения неисправности. Список анализаторов приводится в следующей таблице.

Add manual registry editing solution Добавить в сценарий ремонта ручное редактирование реестра
Search Norton Protected Recycle Bin for missing files Искать отсутствующие файлы в Защищенной Корзине
Search Recycle Bin for missing files Искать отсутствующие файлы в стандартной Корзине
Search all hard drives for missing files Искать отсутствующие файлы на всех жестких дисках
Detect drive letter changes Учитывать изменение буквы, обозначающей диск (например, при включении в BIOS загрузки с диска D: вместо диска C:)
Detect directories that have moved Определять перемещенные или переименованные папки
Ignore missing files on removable drives and UNC paths Игнорировать недостающие файлы на съемных носителях (например, на гибких дисках или CD-ROM)


После выполнения сканирования откроется окно Norton WinDoctor в режиме Problems (Неисправности).









LiveUpdate (Обновление) Этот компонент



LiveUpdate (Обновление). Этот компонент предназначен для регулярного обновления программы через Интернет. Разумеется, для этого следует предварительно зарегистрироваться на сервере компании Symantec Corporation.
Rescue (Служба спасения). Эта служба предназначена для восстановления содержимого жесткого диска в случае разрушения важнейшей системной информации: данных CMOS, таблицы разделов и загрузочных записей. Предусматривает предварительное создание аварийного комплекта на дискетах.
Options (Настройки). Интегрированное средство настройки некоторых компонентов программы.













Локальные переменные макроопределения



Локальные переменные макроопределения

Поскольку генерация макрорасширения ведется по некоторому алгоритму, описанному в макроопределении, реализация этого алгоритма может потребовать собственных переменных. Эти переменные имеют силу только внутри данного макроопределения, в макрорасширении не остается никаких "следов" переменных макроопределения.

Переменные макроопределения могут использоваться двумя способами: их значения могут подставляться вместо их имен в тех операторах макроопределения, которые переходят в макрорасширение; их значения могут проверяться в условных операторах макроязыка и влиять на последовательность обработки.

При подстановке значений переменных макроопределения в макрорасширение работают те же правила, что и при подстановки значений параметров.

Для сильносвязанных Макропроцессоров необходимости в локальных переменных макроопределения, вместо них могут использоваться имена программы (определяемые директивой EQU). Для сильносвязанных и независимых процессоров переменный макроопределения и имена программы должны различаться, для этого может применяться тот же признак, что и для параметров макроопределения. Объявление локальной переменной макроопределения может иметь, например, вид: имя_переменной LOCL начальное_значение (последнее необязательно)



Макрокоманды внутри макроопределений



Макрокоманды внутри макроопределений

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

Для обеспечения такой возможности достаточно сделать рекурсивным только 2-й проход Макропроцессора. В нем несколько усложняется анализ операторов макроопределения. В ветви "Другой" (на нашей схеме алгоритма она начинается с блока ) 2-й проход Макропроцессора должен распознавать макрокоманду и, если оператор - макрокоманда, вызывать сам себя. Распознавание макрокоманды - методом исключения: если оператор - не оператор Макроязыка, не директива Ассемблера и не машинная команда, то он считается макрокомандой и ищется в Таблице имен макроопределений. Для рекурсивного вызова создается новая Таблица локальных переменны (и параметров). Таблица глобальных переменных и индекс уникальных меток используются общие.

Некоторая сложность возникает в том случае если вложенные марокоманды - библиотечные. В нашем алгоритме 1-го прохода содержимое макроопределения (то, что лежит между операторами MACRO и MEND) не анализировалось, следовательно, определения вложенных макрокоманд не заносились в Таблицы макроопределений и имен макропредолений. Есть два варианта решения этой проблемы: На 1-ом проходе все же распознавать вложенные макровызовы и включать макроопределения их в таблицы. Выполнять это на 2-ом проходе: при появлении оператора, не распознанного ни как оператор Макроязыка, ни как директива Ассемблера, ни как машинная команда и ни как макрокоманда, определение которой уже есть в наших таблицах, считать его библиотечной макрокомандой и искать ее макроопределение в библиотеках. Если макроопределение найдено, оно добавляется в наши таблицы. Нет необходимости удалять из таблиц определение вложенной библиотечной макрокоманды при завершении обработки внешнего макровызова: оно может потребоваться при обработке и последующих макровызовов.



Макроопределения внутри макроопределений



Макроопределения внутри макроопределений

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

Против такого средства можно привести 2 соображения: макроопределение не бывает слишком большим - иначе не срабатывают его преимущества над подпрограммой (следует однако признать, что могут существовать довольно большие макроопределения, которые генерируют разнообразные варианты небольших макрорасширений); в языке Pascal допускаются вложенные процедуры, а в языке C - нет; и C прекрасно обходится без них, да и современная практика программирования на Pascal их практически не использует.

Тем не менее, если вложенные макроопределения все же необходимы, можно предложить следующий вариант их реализации: 1-й проход Макропроцессора работает почти по тому же алгоритму, который приведен нами. Принципиально важно, однако, что Таблица макроопределений и Таблица имен макроопределений имеют последовательную структуру, элементы в них записываются в порядке их поступления. В Макропроцессоре есть некоторая целая переменная - глубина вложенности. Ее исходное значение - 0, при каждом появлении оператора MACRO это значение увеличивается на 1, при каждом появлении оператора MEND - уменьшается на 1. Если при глубине вложенности 0 появляется оператор MACRO, в Таблицу имен макроопределений заносится новый элемент, и текст макроопределения записывается в Таблицу макроопределений - до тех пор, пока глубина вложенности не станет равной 0. Появление оператора MACRO при глубине вложенности, большей 0 не приводит к созданию нового элемента в Таблице имен макроопределений. Таким образом, в Таблице имен макроопределений имеется строка только для самого внешнего макроопределения, а все вложенные пока "не видны" и находятся внутри текста внешнего в Таблице макроопределений. 2-й проход Макропроцессора при обработке макровызова считывает текст макроопределения в некоторый буфер и прежде всего рекурсивно вызывает для его обработки Макропроцессор. Для вложенного вызова Макропроцессора доступны Таблица макроопределений и Таблица имен макроопределений, новые макроопределения, обнаруженные рекурсивным вызовом заносятся в конец этих таблиц. При возврате из рекурсивного вызова макроопределения, дописанные им, удаляются из таблиц.



Макрорасширения в листинге



Макрорасширения в листинге

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



Measurement



Measurement

(Измерение) служит для настройки режимов измерения. Движок Time between Sensor Readings (Интервал времени между замерами) определяет периодичность считывания показаний. Этот параметр может находиться в пределах от 1 секунды до 1 недели. Переключатель Measurement Type (Измеряемое значение) имеет положения: Actual Value (Мгновенное значение) и Decaying Average (Усредненное значение).
Группа Sensor Maximum Reading (Максимальное значение показаний) используется только для тех датчиков, максимальное значение которых не определено. В этом случае можно выбрать один из вариантов: Let System Doctor Control (Максимальное измеренное значение - определяется программой) или Use Fixed Maximum (Максимальное значение - определяется пользователем в поле Maximum).

Команда Update (Обновить)

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

Команда Reset (Сброс)

Эта команда доступна для датчиков, регистрирующих изменение параметров во времени, например таких как CPU Usage (Загрузка процессора). При щелчке на этом пункте контекстного меню происходит обнуление показаний.

Команда Remove (Удалить)

С помощью этой команды можно удалить датчик и прекратить отслеживание контролируемого параметра.

Команда Sensor Information (Информация о датчике)

После нажатия на этот пункт контекстного меню откроется окно с информацией о данном датчике. Подробнее>>

Команда Sensor History Window (Журнал датчика)

Эта команда позволяет вывести дополнительное окно, в котором не только отражаются данные за некоторый отрезок времени, но и приводятся цифровые значения: Current (Текущее), Highest (Наибольшее) и Lowest (Наименьшее). Щелчок правой кнопки мыши на заголовке этого окна открывает доступ к командам, относящимся только к этому окну: Always on Top (Всегда сверху) и Reset Highest and Lowest (Сбросить наибольшее и наименьшее значения).

Команда Add Sensor (Добавить датчик)

Этой командой можно добавить новый датчик. Подробный список всех датчиков смотри
здесь>>.

Команда File (Файл)

При постановке различных экспериментов, связанных с оптимизацией работы компьютерной системы, могут использоваться различные датчики и требоваться их различная настройка. Для сохранения и загрузки текущей конфигурации предназначены команды, входящие в группу File: Save (Сохранить), Save As (Сохранить как), Open (Открыть).

Команда View (Вид)

Команда View открывает подменю, вид которого показан на рисунке.
Show Title Bar - Показать/скрыть заголовок окна
Show Symantec Logo - Показать/скрыть эмблему Symantec
Hidden Sensors - Скрытый датчик
Always on Top - Всегда сверху
Auto Hide - Скрывать автоматически
Dock - Пристыковать
Options... - Параметры

Если выбрать пункт Options (Параметры), то откроется диалоговое окно настроек программы, имеющее несколько вкладок.









Модель оперативной памяти



Модель оперативной памяти

Объем адресного пространства памяти, к которому теоретически могут выполняться обращения к программе определяется разрядностью представления адреса. Однако, реально в целевой ВС может быть значительно меньший объем памяти. Во встроенных ВС адресное пространство может покрываться реальной памятью несмежными фрагментами, причем фрагменты реальной памяти могут быть как ОЗУ, так и ПЗУ.

Интерпретатор должен "знать" конфигурацию реальной памяти в целевой ВС. Возможные варианты задания такой конфигурации: Потребовать, чтобы любая ячейка памяти, к которой обращается программа, была описана в программе (директивой DD или BSS). Описать конфигурацию памяти в отдельном файле, являющимся входным для Интерпретатора. Представляется, что второй подход более универсальный, так как: обращение в программе по неописанному в ней адресу памяти возможно (особенно это касается программ для встроенных ВС с абсолютными программами и жестки распределением памяти); определение памяти в программе также является объектом проверки/отладки может содержать ошибки; в Ассемблере нет средств описания ОЗУ/ПЗУ.

Внешнее описание памяти считывается Интерпретатором в начале работы и превращается в таблицу фрагментов вида:

Оперативная память целевой ВС представляется памятью (не обязательно оперативной) исходной ВС. Однако, в модели памяти на исходной ВС мы имеем возможность помимо собственно данных, хранящихся в целевой памяти, представлять также и описание этих данных. Каждый байт целевой памяти представляется двумя байтами исходной памяти. В первом байте представления хранятся собственно данные, а во втором - ряд признаков, характеризующих ячейку целевой памяти. Среди этих признаков могут быть такие:

a признак 1-го байта команды (управление можно передавать только на 1-й байт команды);
b признак команды/данных
c признак инициализированных/неинициализированных данных
d признак изменяемых/неизменяемых данных
e признак останова при передаче управления
f признак останова при передаче записи
g признак останова при передаче чтении
h и т.д.

Все названные признаки - однобитные. Признаки a, b устанавливаются Кросс-ассемблером при трансляции программы и не изменяются при выполнении. Признак с устанавливается Кросс-ассемблером, но может изменяться Интерпретатором в процессе выполнения. Признак d устанавливается Интерпретатором перед началом выполнения на основе таблицы фрагментов и, возможно, дополнительной информации, вводимой программистом (отдельно от программы) и может изменяться программистом в ходе интерактивной отладки. Признаки e-f устанавливаются перед началом выполнения на основе дополнительной информации и может изменяться программистом в ходе интерактивной отладки.

Дополнительная информация о памяти, таким образом, состоит из таблицы фрагментов, списка переменных в ОЗУ, которые не разрешается изменять, списка переменных, при обращении к которым должен происходить останов, и меток, при передаче управления на которые должен происходить останов.

Каждое обращение к памяти в программе характеризуется типом: R (чтение), W(запись) или X(передача управления). При любом типе обращения проверяется попадание в реально существующий фрагмент памяти. При обращении типа X проверяется бит a признака, управление может быть передано только на байт с установленным признаком a. При обращениях типа R и W проверяется бит b признака, обращения этого типа могут происходить только к данным При обращениях типа R проверяется бит c признака, читаться могут только инициализированные данные При обращениях типа W проверяется бит d признака, данные должны быть изменяемые, бит с признака при этом устанавливается, т.е. данные становятся инициализированными.



Модель процессора



Модель процессора

Работа процессора моделируется алгоритмом работы Интерпретатора. Основной алгоритм работы модели состоит из цикла, в каждой итерации которого моделируется выполнение одной команды целевой программы. Итерация этого цикла начинается с выборки байта, записанному в модели памяти по адресу, содержащемуся в модели регистра-счетчика адреса. В подавляющем большинстве ВС первый байт команды содержит код операции, позволяющий однозначно идентифицировать команду. Интерпретатор выполняет поиск по коду операции в таблице команд. При этом может использоваться либо таблица команд Ассемблера, либо ее модификация с расширениями и с возможностью быстрого поиска по коду операции. Распознав команду, Интерпретатор выбирает ее остальные байты (их количество определено в таблице команд) и выделяет из них операнды команды (их количество и кодировка определяется типом команды). Далее алгоритм Интерпретатора разветвляется, в общем случае число ветвей равно числу возможных кодов операции. В каждой ветви вычисляется значение, являющееся результатом выполнения той или иной команды. Вычисленное значение заносится в объект, являющийся для данной команды приемником результата. Кроме того для тех команд, для которых это требуется устанавливаются значения признаков в регистре состояния (перечень признаков, устанавливаемых командой, может содержаться в таблице команд Интерпретатора). Вычисляется новое значение регистра-счетчика адреса. В большинстве случаев это значение получается добавлением к текущему его значению длины команды, но в командах перехода (типа JMP, CALL) это значение вычисляется.

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

Смысл RISC-модели состоит в том, что разветвление алгоритма выполняется сразу же после распознавания команды и выполнение каждой команды полностью реализуется кодами соответствующей ветви.

Смысл CISC-модели состоит в том, что выполнение каждой команды представляется в виде последовательности выполнения простых процедур ("микрокоманд"). Список микрокоманд, составляющих выполнение каждой команды, может быть "зашит" в программу в виде последовательности вызовов или представлен в виде данных, например, в виде списка номеров процедур. В последнем случае алгоритм не требует ветвления, а сводится к циклу, в каждой итерации которого выбирается номер очередной процедуры и вызывается процедура с данным номером. В предельном случае выполнение каждой команды может быть представлено в виде исходного текста на языке макрокоманд, который интерпретируется Интерпретатором.

Пример

Пусть в языке микрокоманд имеются следующие (показаны не все) микрокоманды:

Микрокоманда Выполнение
GETR n,rx Выборка номера регистра, заданного в n-ом операнде в промежуточную переменную rx
GETA n,ax Выборка адреса, заданного в n-ом операнде в промежуточную переменную ax
LDR dx,rx Выборка данных из регистра, номер которого находится в промежуточной переменной rx в промежуточную переменную dx
LDM dx,ax Выборка данных из памяти по адресу, находящемуся в промежуточной переменной ax промежуточную переменную dx
SDR rx,dx Запись данных из промежуточной переменной dx в регистр, номер которого находится в промежуточной переменной rx
SDM dx,ax Запись данных из промежуточной переменной dx в память по адресу, находящемуся в промежуточной переменной ax промежуточную переменную dx
ADD dx1,dx2 Сложение данных из промежуточной переменной dx1 с данными из dx2; результат - в dx1
SIG dx Инверсия знака данных, содержащихся в промежуточной переменной dx
CC1 dx Установка признаков "больше", "меньше", "равно" по значению, содержащемуся в промежуточной переменной dx
CC2 dx Установка признака переполнения по значению, содержащемуся в промежуточной переменной dx
PC1 Увеличение регистра-счетчика адреса на длину команды
PC2 dx Запись данных из промежуточной переменной dx в регистр-счетчика адреса
END Окончание микропрограммы

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

Команда языка Ассемблера Выполнение Микропрограммная реализация
LR регистр2,регистр1 Пересылка данных из регистра1 в регистр2 GETR 2, r1; LDR d1,r1; GETR 1,r2; SDR r2,d1, PC1; END;
L регистр,память Пересылка данных из памяти по адресу память в регистр GETA 2,a1; LDM d1,a1; GETR 1,r1; SDR r1,d1; PC1; END;
AR регистр2,регистр1 Сложение данных из регистра1 с данными в регистре2; результат - в регистре1 GETR 2, r1; LDR d1,r1; GETR 1,r2; LDR d2, r2; ADD d1,d2; SDR r1; PC1; END;
CMP регистр,память Сравнение данных, содержащихся в регистре с данными по адресу память GETR 1,r1; LDR d1,r1; GETA 2, a1; LDM d2,a1; SIG d2; ADD d1,d2; CC1 d1; CC2 d1; PC1; END;
JMP память Переход по адресу память GETA 2,a2; PC2 a2; END;

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



Модель регистров



Модель регистров

Модель регистров включает в себя, как минимум: регистры общего назначения регистр-счетчик адреса регистр состояния

Регистры моделируются переменными интерпретатора.

РОН во время выполнения программы содержат обрабатываемые данные. РОН могут моделироваться как отдельными переменными, так и массивами - в зависимости от их количества и свойств. В тех ВС, где РОН немного и некоторые из них обладают собственными индивидуальными свойствами (напр., Intel) удобно представлять каждый РОН в виде отдельной переменной. Для тех ВС, где РОН много и/или они одинаковы во всем (напр., S/390, все RISC) , их целесообразно представлять в виде массива. Характерно, что в ВС первого типа РОН обычно имеют собственные имена, а в ВС второго типа РОН идентифицируются номерами.

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

Регистр состояния содержит признаки результата выполнения предыдущей команды - больше, меньше, равен нулю (не все команды устанавливают эти признаки) и, возможно, признак привилегированного/непривилегированного режима. Эти признаки могут "упаковываться" в одну переменную или представляться отдельной переменной каждый.



На вкладке



На вкладке









На вкладке Automatic Tracking



На вкладке Automatic Tracking

(Автоматическое отслеживание) можно установить флажок Start automatically with Windows (Автоматический запуск вместе с Windows). Счетчик Maximum number to keep (Максимальное число снимков) ограничивает размер журнала изменений. К количественным ограничениям можно добавить ограничение по времени, установив флажок Purge old snapshots after ... days (Удалять старые снимки, хранящиеся более ... дней).









Настраивающие Загрузчики



Настраивающие Загрузчики

Настраивающий Загрузчик является первым шагом в сторону усложнения от Абсолютного Загрузчика. Функции связывания и перемещения решаются в нем не самым эффективным, но простейшим способом.



Настройка программы



Настройка программы


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

На вкладке Comparison (Сравнение) имеются следующие опции.

Ignore All Tabs and Spaces (Игнорировать все символы табуляции и пробелы).

Ignore Changes in Tabs and Spaces (Игнорировать изменения в символах табуляции и пробелах).

Ignore Upper/Lower Case Changes (Игнорировать изменение регистра символов)

На вкладке Display (Отображение) того же диалогового окна можно вывести или скрыть нумерацию строк с помощью флажка Show Line Numbers (Отображать нумерацию строк), а также задать шрифт и цвет отображаемых компонентов с помощью раскрывающихся списков Fonts & Colors (Шрифты и цвета).

Программа Norton File Compare имеет некоторую интеграцию с программой Norton Registry Tracker. При работе последней различия некоторых элементов могут быть непринципиальными, поэтому можно исключить их из результатов сравнения. Это можно сделать непосредственно из программы Norton File Compare - надо выделить требуемые строки и подать команду Options>Exclude (Параметры>Исключить). А по команде Options>Edit Exclusions (Параметры>Редактирование исключений) открывается диалоговое окно Norton Registry Tracker Settings, в котором можно удалить установленное исключение.















Некоторые дополнительные директивы



Некоторые дополнительные директивы

OGR Установка адреса. Операндом директивы является числовая константа или выражение, вычисляемое при ассемблировании. Как правило, Ассемблер считает, что первая ячейка обрабатываемой им программы располагается по адресу 0. Директива ORG устанавливает счетчик адресов программы в значение, определяемое операндом. Так, при создании COM-программ для MS DOS программа начинается с директивы ORG 100H. Этим оператором резервируется 256 байт в начале программы для размещения префикса программного сегмента.
В абсолютных программах директива применяется для размещения программы по абсолютным адресам памяти.
START/
SECT
Начало модуля или программной секции. Операндом директивы является имя секции. Этой директивой устанавливается в 0 счетчик адресов программы. Программа может состоять из нескольких программных секций, в каждой секции счет адресов ведется от 0. При обработке этой директивы на 1-ом проходе Ассемблер создает таблицу программных секций вида:

На 1-ом проходе Ассемблер составляет список секций, и только в конце 1-го прохода определяет их длины и относительные адреса в программе.
На 2-ом проходе Ассемблер использует таблицу секций при трансляции адресов. Директивы связывания ENT Входная точка. Операндом этой директивы является список имен входных точек программного модуля - тех точек, на которые может передаваться управление извне модуля или тех данных, к которым могут быть обращения извне. EXT Внешняя точка. Операндом этой директивы является список имен, к которым есть обращение в модуле, но сами эти имена определены в других модулях. Эти директивы обрабатываются на 2-ом проходе, и на их основе строятся таблицы связываний и перемещений (см. Тему 4).

Некоторые структуры данных 1го прохода



Некоторые структуры данных 1-го прохода

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

Таблица директив содержит одну строку для каждой директивы Обработка каждой директивы происходит по индивидуальному алгоритму, поэтому параметры обработки нельзя представить в виде данных единого для всех директив формата. Для каждой директивы в таблице хранится только идентификация (имя или адрес, или номер) процедуры Ассемблера, выполняющей эту обработку. Некоторые директивы обрабатываются только на 1-ом проходе, некоторые - только на 2-ом, для некоторых обработка распределяется между двумя проходами.

Таблица символов является основным результатом 1-го прохода Ассемблера. Каждое имя, определенное в программе, должно быть записано в таблице символов. Для каждого имени в таблице хранится его значение. , размер объекта, связанного с этим именем и признак перемещаемости/неперемещаемости. Значением имени является число, в большинстве случаев интерпретируемое как адрес, поэтому разрядность значения равна разрядности адреса. Перемещаемость рассматривается в разделе, посвященном Загрузчикам, здесь укажем только, что значение перемещаемого имени должно изменяться при загрузке программы в память. Имена, относящиеся к командам или к памяти, выделяемой директивами DD, BSS, как правило, являются перемещаемыми (относительными), имена, значения которых определяются директивой EQU (см. ниже), являются неперемещаемыми (абсолютными).

Таблица литералов содержит запись для каждого употребленного в модуле литерала. Для каждого литерала в таблице содержится его символьное обозначение, длина и ссылка на значение. Литерал представляет собой константу, записанную в памяти. Обращение к литералам производится так же, как и к именам ячеек программы. По мере обнаружения в программе литералов Ассемблер заносит их данные в т.наз. литеральный пул. Значение, записываемое в таблицу литералов является смещением литерала в литеральном пуле. После окончания 1-го прохода Ассемблер размещает литеральный пул в конце программы (т.е., назначает ему адрес, соответствующий последнему значению счетчик адреса) и корректирует значения в таблице литералов, заменяя их смещениями относительно начала программы. После выполнения этой корректировки таблица литералов может быть совмещена с таблицей символов.



Некоторые возможности Макроязыка



Некоторые возможности Макроязыка

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



Непосредственно Связывающие Загрузчики



Непосредственно Связывающие Загрузчики

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



Norton Disk Doctor (Проверка диска)



Norton Disk Doctor (Проверка диска).







Norton Registry Editor (Редактор



Norton Registry Editor (Редактор реестра). Программа выполняет функции, аналогичные системной служебной программе RegEdit, но имеет расширенные возможности.


Norton Registry Tracker (Образ реестра). Программа, выполняющая "моментальный снимок" системного реестра с целью контроля за изменениями, возникающими в Реестре в процессе работы, например при установке новых программ. Позволяет восстановить состояние Реестра, предшествующее установке новой программы.

Прочие компоненты


Некоторые компоненты пакета обособлены и вызываются с помощью кнопок меню в верхней части окна Norton Utilites Integraror.









Norton System Check (Проверка



Norton System Check (Проверка системы). Программа предназначена для всесторонней проверки операционной системы и объединяет в себе средства проверки Windows и жесткого диска. Используется для улучшения эксплуатационных показателей и как средство профилактического обслуживания.


Обслуживание системы (System Maintenance)











Norton System Doctor (Системный монитор)



Norton System Doctor (Системный монитор).







Norton WinDoctor



Norton WinDoctor









Norton WinDoctor (Проверка Windows)



Norton WinDoctor (Проверка Windows). Мощное средство для проверки операционной системы (системного реестра и системных файлов Windows) и выявления наиболее характерных ошибок, например неприсоединенных записей реестра, ярлыков, указывающих на несуществующие файлы и т.п.











Nortondiskdoctordos



Этот модуль может запускаться для проверки жесткого диска после аварийного завершения работы Windows вместо стандартной системной программы scandisk.exe. Подключение модуля выполняют в окне Интегратора.

1.Нажмите кнопку Options
.  
2.Откройте вкладку General.  
3.Установите флажок Replace ScanDisk with Norton Disk Doctor (Заменить ScanDisk программой Norton Disk Doctor).  
 
Необходимо отметить, что использование DOS-модуля программы Norton Disk Doctor -- не самая лучшая идея, особенно в Windows 98. Эта программа работает гораздо медленнее, чем стандартная программа поверки диска.








Nortondiskdoctorfordos



Этот DOS-модуль может пригодиться в ситуации, когда из-за ошибок в файловой системе невозможно загрузить операционную систему с жесткого диска. При запуске из оболочки Rescue Disk Shell последует предложение вставить в дисковод дискету NU Emergency Utilities Disk 1. Вставьте необходимую дискету и нажмите клавишу ENTER.

После загрузки программы вы увидите окно, показанное на рисунке ниже.

Diagnose Disk - запуск проверки диска;

Surface Test - проверка поверхности диска;

Undo Changes - отмена изменений;

Options - настройки;

Quit Disk Doctor - закрыть программу.


Основные принципы работы и настройки программы сходны с описанными в разделе Norton Disk Doctor для Windows, поэтому подробно останавливаться на них не будем.

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

































Nortonrescuefordos



DOS-модуль программы Rescue восстанавливает следующие поврежденные данные в служебных секторах жесткого диска:
·CMOS Information (Данные CMOS). Данные CMOS восстанавливают параметры BIOS компьютера (Setup). Наиболее критичны параметры, задающие тип жесткого диска. Неверные значения могут сделать загрузку невозможной.  
·Boot Records (Загрузочные записи). В случае ошибок в загрузочной записи система может потерять таблицу размещения файлов (FAT), корневую папку и, таким образом, вообще все ваши данные.  
·Partition Tables (Таблицы разделов). Данные таблицы разделов описывают физические характеристики каждого диска, разбиение его на диски DOS, присутствие других операционных систем. Неверная информация в такой таблице заблокирует загрузку с этого диска или сделает его недоступным для DOS.  

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

После запуска программы Rescue предлагается с помощью флажков уточнить, какую именно информацию требуется восстановить.
При работе аварийного комплекта мышь не работает, так что перемещаться между полями можно клавишей TAB, а устанавливать и сбрасывать флажки - клавишей ПРОБЕЛ. Нажатие клавиши ENTER восстановит утраченную информацию. Завершить работу программы можно клавишей ESC.


Использовать для восстановления диска аварийный комплект можно только на том компьютере, на котором он был создан.






























О структуре таблиц Ассемблера



О структуре таблиц Ассемблера

Структура таблиц Ассемблера выбирается таким образом, чтобы обеспечить максимальную скорость поиска в них.

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

Таблица символов формируется динамически - в процессе работы 1-го прохода. Поиск же в этой таблице осуществляется как в 1-ом проходе (перед занесением в таблицу нового имени, проверяется, нет ли его уже в таблице). Построение этой таблицы как таблицы прямого доступа не очень целесообразно, так как неизбежно возникновение коллизий. Поэтому поиск в таблице символов может быть дихотомическим, но для этого таблица должна быть упорядочена. Поскольку новые имена добавляются в таблицу "по одному", и после каждого добавления упорядоченность таблицы должна восстанавливаться, целесообразно применять алгоритму сортировки, чувствительные к исходной упорядоченности данных.

Эти же соображения относятся и к другим таблицам, формируемым Ассемблером в процессе работы. При больших размерах таблиц и размещении их на внешней памяти могут применяться и более сложные (но и более эффективные) методы их организации, например - B+-деревья.



Объектноориентированный Ассемблер



Объектно-ориентированный Ассемблер

Макросредства могут обеспечить и реализацию свойств объектно-ориентированного программирования - в большей или меньшей степени.

Простейшее расширение Ассемблера ОО свойствами предполагает введение макрокоманды определения объекта (или резервирования памяти для объекта). В макрокоманде указывается тип объекта и она употребляется вместо директив DC/BSS. Для типа могут быть созданы макрокоманды-операции. В этом варианте может быть воплощен принцип полиморфизма, так как одна и та же операция может быть допустимой для разных типов. (Например, одна команда сложения для всех типов - чисел, независимо от из разрядности и формы представления). Принцип инкапсуляции реализуется здесь в том смысле, что программист, использующий макрокоманды не должен знать внутренней структуры объекта и подробности выполнения операций над ним, защиту же внутренней структуры организовать гораздо сложнее.

Имеются примеры разработок, в которых на уровне Макроязыка созданы и средства описания классов, включающие в себя наследование классов со всеми вытекающими из него возможностями.



Общие сведения



Общие сведения


Программа Norton Protection служит для обеспечения возможности восстановления удаленных файлов. В отличие от стандартной корзины Windows, программа Norton Protection позволяет восстановить даже файлы не попавшие в Корзину, например удаленные автоматически во время работы приложений или в сеансе MS-DOS.

Система защиты Norton Protection основана на том, что место, освобождаемое при удалении файла, хотя и считается свободным, все-таки некоторое время "придерживается" от перезаписи, пока имеется другое свободное пространство. Дело в том, что при удалении файла не происходит его физического уничтожения - меняется только первый байт в имени файла, что для операционной системы означает освобождение занятого файлом места. На освободившееся место тут же может быть записан другой файл, а может быть и нет - все зависит от случая. Пока перезапись не произошла, файл можно восстановить.









Обычно предлагается провести полную



Обычно предлагается провести полную оптимизацию (Full Optimization), которая дает наибольший эффект, но занимает наибольшее время. Если вы не располагаете достаточным временем, то выберите вариант Unfragmented Files Only (Только дефрагментация файлов) или совсем быстрый вариант Unfragmented Free Space (Дефрагментация свободного места).
Флажок Optimize Swap File (Оптимизировать файл подкачки) снимать не рекомендуется, так как от этого напрямую зависит быстродействие системы.











Одно и многопроходный Ассемблер



Одно- и многопроходный Ассемблер

Мы показали, что в двухпроходном Ассемблере на 1-ом проходе осуществляется определение имен, а на втором - генерация кода.

Можно ли построить однопроходный Ассемблер? Трудность состоит в том, что в программе имя может появиться в поле операнда команды прежде, чем это имя появится в поле метки/имени, и Ассемблер не может преобразовать это имя в адресное выражение, т.к. еще на знает его значение. Как решить эту проблему? Запретить ссылки вперед. Имя должно появляться в поле операнда только после того, как оно было определено как метка при команде или данных или через директиву EQU. В этом случае построить Ассемблер легко, но накладываются ограничения, стесняющие действия программиста. Если объектный модуль сохраняется в объектной памяти, то Ассемблер может отложить формирование кода для операнда - неопределенного имени и вернуться к нему, когда имя будет определено. При появлении в поле операнда команды неопределенного имени поле операнда не формируется (заполняется нулями). Таблица символов расширяется полями: признаком определенного/неопределенного имени, и указателем на список адресов в объектном модуле, по которым требуется модификация поля операнда.
При появлении имени в поле операнда Ассемблер ищет имя в таблице символов. Если имя найдено и помечено как определенное, Ассемблер транслирует его в адресное выражение, как и при 2-проходном режиме. Если имя не найдено, Ассемблер заносит имя в таблицу символов, помечает его неопределенным и создает первый элемент связанного с именем списка, в который заносит адрес в объектном модуле операнда данной команды. Если имя найдено, но помечено как определенное, Ассемблер добавляет в список, связанный с данным именем, адрес в объектном модуле операнда данной команды.
При появлении имени в поле метки команды или директивы Ассемблер определяет значение имени и ищет его в таблице символов. Если имя не найдено, Ассемблер добавляет имя в таблицу и помечает его как определенное. Если имя найдено и помечено как определенное, Ассемблер выдает сообщение об ошибке (неуникальное имя). Если имя найдено, но помечено как определенное, Ассемблер обрабатывает связанный с данным именем список: для каждого элемента списка по хранящемуся в нем адресу в объектном модуле записывается значение имени. После обработки список уничтожается, значение имени сохраняется в таблице символов и имя помечается как определенное.
После окончания прохода Ассемблер проверяет таблицу символов: если в ней остались неопределенные имена, выдается сообщение об ошибке. Если объектный модуль выводится в файл по мере его формирования, алгоритм работы Ассемблера очень похож на предыдущий случай. Ассемблер не может при определении имени исправить уже сформированные и выведенные в файл операнды, но вместо этого он формирует новую запись объектного модуля, исправляющую старую. При загрузке будет сначала загружена в память запись с пустым полем операнда, но затем на ее место - запись с правильным полем операнда.

Для чего может понадобиться многопроходный Ассемблер? Единственная необходимость во многих проходах может возникнуть, если в директиве EQU разрешены ссылки вперед. Мы упоминали выше, что имя в директиве EQU может определяться через другое имя. В одно- или двухпроходном Ассемблере это другое имя должно быть обязательно определено в программе выше. В многопроходном Ассемблере оно может быть определено и ниже. На первом проходе происходит определение имен и составление таблицы символов, но некоторые имена остаются неопределенными. На втором проходе определяются имена, не определившиеся во время предыдущего прохода. Второй проход повторяется до тех пор, пока не будут определены все имена (или не выяснится, что какие-то имена определить невозможно). На последнем проходе генерируется объектный код.



Окно Customize Full Optimization



Окно Customize Full Optimization


В правой части окна на панели Disk Layout мы видим распределение файлов по категориям:

Frequently accessed files (Часто открываемые файлы);

Remaining files and folders (Редактируемые данные)

Infrequently modified files (Редко изменяемые файлы)

Frequently modified files (Часто изменяемые файлы)

Files to place last (Файлы, располагаемые в конце)

Free Space (Свободное место)

Infrequently accessed files (Редко открываемые файлы)


На левой половине расположены вкладки, задающие порядок оптимизации.









Окно Norton Disk Doctor



Norton Disk Doctor











Окно Options for Norton Disk Doctor



Окно Options for Norton Disk Doctor









Окно Speed Disk



Speed Disk









Окончание макроопределения



Окончание макроопределения

Если у макроопределения есть начало (оператор MACRO), то у него, естественно, должен быть и конец. Конец макроопределения определяется оператором MEND. Этот оператор не требует параметров. Макроопределение, взятое в "скобки" MACRO - MEND может располагаться в любом месте исходного модуля, но обычно все макроопределения размещают в начале или в конце модуля.



Операнды команд



Операнды команд.

Константы - могут представлять непосредственные операнды или абсолютные адреса памяти. Применяются 10-ные, 8-ные, 16-ные, 2-ные, символьные константы.

Непосредственные операнды - записываются в сам код команды.

Имена - адреса ячеек памяти. При трансляции Ассемблер преобразует имена в адреса. Способ преобразования имени в значение зависит от принятых способов адресации. Как правило, в основным способом адресации в машинных языках является адресация относительная: адрес в команде задается в виде смещения относительно какого-то базового адреса, значение которого содержится в некотором базовом регистре. В качестве базового могут применяться либо специальные регистры (DS, CS в Intel) или регистры общего назначения (S/390).

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

Специальный синтаксис - явное описание способа адресации (например, указание базового регистра и смещения и т.п.).



Оператор безусловного перехода и метки макроопределения



Оператор безусловного перехода и метки макроопределения

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



Оператор условного перехода



Оператор условного перехода

Возможный формат оператора: MIF условное_выражение макрометка Если условное_выражение имеет значение "истина", обработка переходит на оператор, помеченный макрометкой, иначе обрабатывается следующий оператор макроопределения. Условные выражения формируются по обычным правилам языков программирования. В них могут употребляться параметры и переменные (локальные и глобальные) макроопределения, константы, строковые, арифметические и логические операции и, конечно же, операции сравнения. Кроме того, в составе Макроязыка обычно имеются специальные функции, позволяющие распознавать тип своих операндов, например: является ли операнд строковым представлением числа, является ли операнд именем, является ли операнд именем регистра и т.п.