Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
рыбак.docx
Скачиваний:
42
Добавлен:
21.09.2019
Размер:
2.35 Mб
Скачать

2.4.1 Прямые методы адресации.

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

2.4.2. Косвенные методы адресации.

Косвенная адресация является альтернативой индексной. Использование косвенного метода в сочетании с другими, такими, как регистровый, индексный или автоинкрементный, дает возможность получить весьма изощренные приемы адресации.

Существует множество способов применения косвенной адресации. Например, с ее помощью можно обеспечить передачу параметров в подпрограмму (как альтернатива индексному методу);

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

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

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

Если же длина слова позволяет адресовать всю память, то предпочтительнее прежде исполнять индексацию, поскольку это облегчает, например, передачу параметров в подпрограмму.

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

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

Стек – это один из способов организации памяти, несколько отличающийся от организации памяти с произвольным доступом. Память ЭВМ, организованная в виде стека, включает в себя определенное количество одинаковых запоминающих ячеек, однако доступ к этим ячейкам не может осуществляться произвольным образом, т.е. в любое время к любой ячейке. Доступ к ячейкам стека осуществляется не по адресам ячеек, а только через так называемую «вершину стека» - ячейку памяти стека, доступную в данный момент времени. При последовательной записи данных в стек загружаемые данные последовательно помещаются на вершину стека, при этом ранее записанные данные как бы проталкиваются вглубь стека. В каждый момент времени для чтения доступно только слово, находящееся на его вершине. При этом прочитать слово можно только один раз, т.к. после прочтения оно выталкивается из стека и на его место становится слово, записанное ранее. Такой способ организации памяти коротко формулируют в виде: «последним пришел – первым вышел».

При работе со стеком содержимое регистра-указателя стека интерпретируется процессором как адрес «вершины» стека (адрес ячейки, в которой число, записанное в стек последним).

Регистр-указатель стека всегда содержит адрес последней записанной ячейки стека, то есть указывает на вершину стека.

Метод адресации ячеек памяти, который используется при засылке чисел в стек, носит название косвенная адресация через регистр (указатель стека) с предварительным автоуменьшением его содержимого.

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

В ЭВМ автоматизация действий при обращении к подпрограммам осуществляется с помощью, имеющейся в системе команд любой ЭВМ пары команд вызов подпрограммы (передача управления на адрес первой команды подпрограммы) – возврат из подпрограммы (переход к команде, адрес которой является следующим за командой, вызывавшей подпрограмму).

При выполнении команды вызов подпрограммы процессор осуществляет следующие действия:

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

- задаваемый в команде вызова подпрограммы адрес входа в подпрограмму помещается в регистр-счетчик команд.

- после этого из памяти считывается команда, адрес которой находится в счетчике команд, то есть первая команда подпрограммы, и начинается выполнение подпрограммы.

Командой возврат из подпрограммы должна завершаться любая подпрограмма:

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

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