Машинные команды. Загрузочный модуль


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

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

Регистры.

Все процессоры имеют как минимум 6 системных регистров: для адреса текущей команды (счетчик команд), регистр флагов, где хранятся коды арифметических условий и, кроме того, много другой служебной информации (слово состояния процессора), три буферных регистр АЛУ и буферный регистр, в котором хранится текущая команда.

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

  1. каждый код операции работает только со своим регистром
  2. ортогональная система – все команды могут работать с любыми регистрами

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

Адреса памяти.

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

В современных компьютерах единицей адресации оперативной памяти является байт.

Операнды команд могут быть как регистрами, так и ячейками памяти. Некоторые архитектуры допускают произвольное сочетание регистров и ячеек в одной команде (PDP-11, VAX). В других архитектурах, например, х86 и МС680х0 только один операнд может размещаться в памяти, а второй всегда обязан быть регистром. У RISC-процессоров арифметические операции разрешены только над регистрами, а для обращений к памяти выделены специальные команды.

В зависимости от подхода, применяемого в конкретной системе команд , архитектуры подразделяются на память-память, регистр-память, регистр-регистр (SS, RR, RS).

Код операции Память (S) Память (S)

 

Код операции Регистр (R) Память (S)

 

Код операции Регистр (R) Регистр (R)

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

Режимы адресации

Большинство современных процессоров поддерживают многочисленные режимы адресации.

  1. Абсолютная адресация. Поле команды непосредственно содержит номер целевой ячейки памяти. Таким способом производится обращение к объектам с постоянными адресами (статическим и внешним переменным, точкам входа подпрограмм).
  2. Косвенно-регистровый режим. Адресное поле не используется; значение регистра интерпретируется как адрес операнда. Используется в стеках. Стек – это структура данных, над которой можно осуществлять две операции – проталкивание (push)значения и выталкивание (pop) в порядке, обратном тому, в котором значения проталкивались.
  3. Косвенно-регистровый со смещением (базовая адресация, индексная адресация). Адрес операнда образуется сложением регистра и адресного поля команды. Используется при адресации массивов, стеков и пр.
  4. Базово-индексный режим. Адрес операнда образуется сложением двух или, реже, большего количества регистров, возможно, еще и адресного смещения.
  5. Адресация с использованием счетчика команд. Использование счетчика команд в косвенно –регистровом режиме со смещением позволяет адресовать код и данные относительно адреса текущей команды. Программный модуль, в котором используется только такая адресация (относительная) позиционно-независим, его можно перемещать по памяти , и он даже не заметит факта перемещения (почти такого же эффекта можно достичь и базовой адресацией).
  6. Сложные режимы адресации – комбинации различных режимов.

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

Программа – это результат компиляции исходного текста программы, структура загрузочного модуля создается компилятором.

Пример структуры загрузочного модуля (упрощенный вариант раннего Unix):

 
 

 


где

  • «Магическое число» - признак, что это именно загрузочный модуль
  • Text_size – длина области кода программы
  • Data_size – длина области инициализированных данных программы
  • Bss_size длина области неинициализированных данных программы
  • Start – стартовый адрес программы

Загрузка программ

 

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

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

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



Дата добавления: 2016-06-05; просмотров: 2165;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.011 сек.