Большая техническая энциклопедия
2 4 7
D L N
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я
СА СБ СВ СГ СД СЕ СЖ СИ СК СЛ СМ СН СО СП СР СТ СУ СФ СХ СЦ СЧ СШ СЪ СЫ СЭ СЮ

Сегмент - команда

 
Сегмент команд содержит команду CALL ( например, CALL MULU32), а также команду RET, обеспечивающую возврат управления операционной системе DOS. Далее, нередко в нем находятся команды присваивания начальных значений тем регистрам и ячейкам памяти, через которые вызывающая программа рассчитывает получить результат.
Пример программы для ввода и трансляции. Команды, находящиеся в сегменте команд, образуют единственную процедуру, окаймленную псевдооператорами OUR PROG PROC FAR и OUR PROG ENDP. Из этих соображений Вам следует оформлять свои программы как процедуры.
Подобные команды обычно сопутствуют оператору ASSUME в сегменте команд. Они указывают Ассемблеру, где размещен сегмент данных.
Вспомните, что для вычисления адреса команды в сегменте команд микропроцессор 8088 извлекает номер блока памяти из регистра CS, а смещение - из регистра IP. Подобным образом за счет выбора номера блока из соответствующего регистра сегмента, а смещения - из другого регистра осуществляется доступ к данным других сегментов. Выбирая номер блока из регистра ES, микропроцессор может также получить доступ к дополнительному сегменту ( подробнее об этом см. в гл.
Процедура с атрибутом NEAR может быть вызвана только из того сегмента команд, в котором она определена.
Обычно оператор ASSUME помещают сразу же за оператором SEGMENT, определяющим сегмент команд.
Команды прерываний. На рис. 3.11 показаны стек, указатель стека SP, регистр сегмента команд CS и указатель команд IP до и после исполнения приведенной выше команды.
Микропроцессор позволяет независимо адресовать четыре программных сегмента в памяти, называемых текущими сегментами команд, данных, стека и текущим дополнительным сегментом.
Псевдооператор EXTRN сообщает Ассемблеру, что процедура, вызываемая командой CALL из сегмента команд, находится на диске в другом объектном файле. Например, оператор EXTRN MULU32: FAR сообщает Ассемблеру, что процедура MULU32 находится в объектном файле, который надо загрузить вместе с текущим файлом; суффикс FAR сообщает ему, что процедура MULU32 находится в другом сегменте команд.
Этот оператор сообщает Ассемблеру, что размещение команд программы в памяти надо начать, пропустив 256 байт от начала сегмента команд.
Читая слева направо, мы видим, что следующая команда имеет адрес 0923: 0000 ( это соответственно значения регистра сегмента команд CS и указателя команд IP), объектный код этой команды - IE, а самая команда - PUSH DS.
О вектор-адрес имеет форму адрес сегмента: адрес смещения; адрес сегмента может быть определен в явном виде шестнадцатеричным кодом или указанием соответствующего сегментного регистра; сегмент команд может быть задан по умолчанию; адрес смещения описывается в явном виде шестнадцатеричным кодом.
Листинг трансляции примера программы 54.
Для сегмента стека и сегмента данных эти числа показывают значения, запоминаемые в каждой ячейке памяти. Для сегмента команд эти числа означают машинные коды, выполняемые микропроцессором 8088; текст в правой части листинга взят из исходной программы.
Оператор ASSUME указывает Ассемблеру, что для адресации каждой метки из сегмента CSEG надо пользоваться регистром CS. Другими словами, он идентифицирует CSEG как сегмент команд, а не сегмент данных, сегмент стека или дополнительный сегмент.
Процедуры могут иметь атрибут NEAR или FAR. Процедуры с атрибутом NEAR могут быть вызваны только из того сегмента команд, в котором они определены, а процедуры с атрибутом FAR могут быть вызваны и из другого сегмента команд.
На рис. 2.1 показан текст нашей программы копирования таблицы. Обратите внимание, что она имеет сегмент стека STACK, сегмент данных DSEG и сегмент команд CSEG.
Какие из приведенных ниже команд и фрагментов программ ошибочны. Исходите из того, что переменные определены в сегменте данных, а команды - в сегменте команд.
Как мы уже упоминали, в программе может быть до четырех видов сегментов: сегмент данных, сегмент команд, дополнительный сегмент и сегмент стека.
При этом мы ввели g 36, поскольку, как мы заметили ранее, команда RET имеет смещение 36 от начала сегмента команд.
Процедуры могут иметь атрибут NEAR или FAR. Процедуры с атрибутом NEAR могут быть вызваны только из того сегмента команд, в котором они определены, а процедуры с атрибутом FAR могут быть вызваны и из другого сегмента команд.
Псевдооператор EXTRN сообщает Ассемблеру, что процедура, вызываемая командой CALL из сегмента команд, находится на диске в другом объектном файле. Например, оператор EXTRN MULU32: FAR сообщает Ассемблеру, что процедура MULU32 находится в объектном файле, который надо загрузить вместе с текущим файлом; суффикс FAR сообщает ему, что процедура MULU32 находится в другом сегменте команд.
Пример входного листинга ассемблера для микропроцессора Intel 8085 показан на рис. 7.8. Каждой операции языка проектирования предшествует точка с запятой, указывая, что это комментарий. В этом примере псевдокоманда DS выполняет ту же функцию, что и описание байтовых данных в PL / M. Псевдокоманды DSEG ( сегмент данных) и CSEG ( сегмент команд) используются для разделения областей памяти, резервируемых для данных, от областей, резервируемых для команд.
В данном случае регистр ВХ содержит смещение адреса процедуры относительно регистра сегмента CS. При исполнении этой команды микропроцессор 8088 копирует содержимое регистра ВХ в указатель команд IP, затем передает управление команде, адресуемой парой регистров CS: IP. Если, например, регистр ВХ содержит 1АВН, то микропроцессор 8088 извлечет следующую команду из ячейки 1АВН, находящейся в сегменте команд.
Обратим еще раз внимание на различие между вызовами символа и повторяющимися вызовами процедуры, генерирующей изображение. Процедура может быть связана; различными преобразованиями, изменяющими изображение от вызова к вызову. Следовательно, такая последовательность вызовов процедуры генерирует последовательность различных экземпляров изображения. Каждый вызов приводит к созданию нового, сегмента команд дисплейного процессора, - процедура является аналогом макроопределения. Символ же размещается в дисплейном файле и может быть вызван во время выполнения программы дисплейного процессора. Для последней символ является аналогом подпрограммы.
Память для команд логически отделена от памяти для данных. Программный код организован в виде набора сегментов, аналогичных сегментам в оверлейной структуре. Каждой процедуре отводится свой сегмент, причем длина сегмента не должна превышать 64 килобайта. При загрузке сегмента в память ему ставится в соответствие дескриптор, содержащий физический адрес начала сегмента. При этом есть отличие работы виртуальной памяти команд от виртуальной памяти данных. Виртуальная память данных организована в виде страниц постоянной длины, а память команд - в виде сегментов переменной длины. Если уже загружена новая страница из памяти данных на место старой, то содержимое старой страницы надо запомнить на внешнем устройстве, в то время как сегменты команд неизменны и копию их в памяти запоминать не надо. При работе с данными, в отличие от команд, везде фигурируют не физические, а логические адреса, которые аппаратура преобразует в физические с помощью еле -; йиальных таблиц. Отметим также, что память команд и данных находится в одной и той же физической памяти, и одна и та же ячейка в разные моменты выполнения программы может использоваться системой для хранения данных или команд.
Внешние процедуры типа библиотечных программ ( например, программы решения систем линейных уравнений) могут постоянно находиться в ОЗУ для использования их различными процессами в режиме мультипрограммной работы. Для этого необходимо, чтобы процедурный сегмент любой программы был организован так, что ни одна его ячейка не изменится в процессе решения. Обращение к процедуре извне должно осуществляться только по ее идентификатору, а ее работа должна быть инвариантной к размещению в памяти. При выполнении этих требований процесс может обратиться к процедуре, сегмент которой еще не включен в сегмент основных кодовых слов. Аналогично будет организована работа и с информационными сегментами. При последующих обращениях после первого организующая система в вызове процедуры или массива информации не участвует, и процесс при вызове использует уже только номер в сегменте основных адовых слов. Основным затруднением при выполнении обращений по такой схеме является то, что независимо от числа обращений к сегменту команды в процедурном сегменте не должны формироваться.
 
Loading
на заглавную 10 самыхСловариО сайтеОбратная связь к началу страницы

© 2008 - 2014
словарь online
словарь
одноклассники
XHTML | CSS
Лицензиар ngpedia.ru
1.8.11