Адресация команд и данных

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

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

  • • какие данные потребуются (и потребуются ли) для исполнения команды, где находятся нужные данные и как их вызвать;
  • • где искать следующую команду.

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

Адресация команд. При выполнении линейной части программы, когда команды расположены в памяти одна за другой, для их выборки из памяти используется программный счетчик (указатель команд), т.е. адресация полностью возлагается на аппаратные средства и адрес следующей команды в текущей команде не указывается. Необходимость указания адреса следующей команды в текущей возникает при передаче управления подпрограмме (процедуре), расположенной в другом месте памяти. Такие случаи встречаются реже, и для их реализации предусмотрен набор команд (CALL, JMP, RET и др.), предназначенный специально для управления программой. В командах управления программой задан способ адресации, определяющий условия передачи управления, для реализации которого используются фиксированные указатели (в виде специальных, а не общих регистров). Например, в современных процессорах при вызове подпрограммы (команда CALL) новые значения адреса формируются путем загрузки селектора в сегментный регистр кода CS и смещения в программный счетчик, или указатель команды IP. При этом в стеке сохраняется пара CS:IP.

Адресация данных. В описании каждой команды должны быть указаны адреса мест расположения исходных операндов (источников), задействованных при выполнении операции, и адрес места расположения операнда результата операции (приемника). Источниками и приемниками операндов могут служить регистровая память RSEG (Register Segment), память данных DSEG (Date Segment) или порты ввода-вывода IOSEG (Input/Out Segment). Адрес, определяющий место расположения операнда при выполнении команды, будем называть исполнительным адресом (Executive Address – ЕА), а способ формирования исполнительного адреса – способом адресации. Известны различные способы адресации, позволяющие:

  • обеспечить не только эффективный доступ к структурированным данным (массивам, стекам, спискам, таблицам), но и перемещение программ при загрузке и выполнении;
  • сократить длину программного кода и число обращений к магистрали;
  • адресовать большой объем памяти при малой разрядности процессора. Для формирования исполнительного адреса используются сведения, заложенные в команде. Сведения об адресе операнда могут быть представлены:
  • • в явной форме, при которой сведения содержатся в адресном поле команды. Эта форма является более гибкой и эффективной, так как позволяет связывать с одной командой множество адресов. Однако ее использование приводит к увеличению длины кода команды;
  • • в неявной форме, когда исполнительный адрес заложен в именной части команды, т.е. место расположения одного или всех операндов определяется мнемоникой команды или кодом операции (OPeration Code – ОРС). В этом случае для одной и той же операции с операндами, расположенными в другом источнике или приемнике, необходимо задавать другой код операции. Следовательно, использование неявной формы приводит к увеличению числа команд, выполняющих однотипную операцию.

На практике применяются обе формы представления адресной информации. Например, в команде LDA addr, выполняющей операцию загрузки аккумулятора содержимым ячейки памяти по указанному адресу, адрес операнда-источника (addr) задан в явной форме, а адрес приемника (аккумулятора) – в неявной (мнемоникой LDA).

 
< Пред   СОДЕРЖАНИЕ     След >