Когда в команде указывается регистр содержащий адрес аргумента то это
Перейти к содержимому

Когда в команде указывается регистр содержащий адрес аргумента то это

  • автор:

 

Процессор

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

Рассмотрим лишь самые общие принципы построения и работы процессора, которые одинаковы как для примитивных, так и для самых современных процессоров.

Любой процессор имеет устройство, выполняющее команды, и собственную внутреннюю память, реализованную внутри микросхемы процессора. Она называется регистрами процессора. Имеется 3 типа регистров:

общие регистры хранят целые числа или адреса. Размер общего регистра совпадает с размером машинного слова и в 32-разрядной архитектуре равен четырем байтам. Число общих регистров и их назначение зависит от конкретного процессора. В большинстве Ассемблеров к ним можно обращаться по именам R0, R1, R2, . Среди общих регистров имеются регистры специального назначения: указатель стека SP (Stack Pointer), счетчик команд PC (Program Counter) и др.;

регистр флагов содержит биты, которые устанавливаются в единицу или в ноль в зависимости от результата выполнения последней команды. Так, бит Z устанавливается в единицу, если результат равен нулю (Zero), бит N — если результат отрицательный (Negative), бит V — если произошло переполнение (oVerflow), бит С — если произошел перенос единицы из старшего или младшего разряда (Carry), например, при сложении двух целых чисел или при сдвиге. Значения битов в регистре флагов используются в командах условных переходов;

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

Команды, или инструкции, процессора состоят из кода операции и операндов. Команда может вообще не иметь операндов или иметь один, два, три операнда. Команды с числом операндов большим трех встречаются лишь в процессорах специального назначения (служащих, например, для обработки сигналов) и в обычных архитектурах не используются. Чаще всего применяются двухадресные и трехадресные архитектуры: к двухадресным относятся, к примеру, все процессоры серии Intel 80×86, к трехадресным — серии Motorola 68000. В двухадресной архитектуре команда сложения выглядит следующим образом:

т.е. один из аргументов команды является одновременно и ее результатом. Этот аргумент называется получателем (destination). Аргумент, который не меняется в результате выполнения команды, называется источником (source). Среди программистов нет единого мнения о том, в каком порядке записывать аргументы при использовании Ассемблера, т.е. в символической записи машинных команд. Например, в Ассемблере «masm» фирмы IBM для процессоров Intel 80×86 получатель всегда записывается первым, а источник вторым. Ассемблер «masm» используется в операционных системах MS DOS и Windows. В Ассемблере «as», который входит в состав компилятора «gcc» и используется в системах типа Unix (Linux и т.п.), получатель всегда является последним аргументом. Та же команда сложения записывается в «as» как

что означает сложить Y и X и результат записать в X.

В трехадресной архитектуре команда сложения имеет 3 операнда:

Получателем в трехадресной архитектуре обычно является третий аргумент, т.е. в данном случае сумма X+Y записывается в Z.

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

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

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

абсолютная адресация — когда в команде указывается константа, равная адресу аргумента;

косвенная адресация — когда в команде указывается регистр, содержащий адрес аргумента;

относительная адресация — адрес аргумента равен сумме содержимого регистра и константы, задающей смещение;

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

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

Режимы адресации со ссылкой на регистр — счетчик команд

При формировании исполнительного адреса операнда в команде в качестве регистра может быть указан регистр — счетчик команд процессора.

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

1. Непосредственный метод адресации (обозначение #N, N — операнд).

Это автоинкрементный метод адресации, использующий в качестве регистра регистр — счетчик команд, то есть (R7)+.

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

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

Непосредственный метод адресации

Рис. 8.10. Непосредственный метод адресации

2. Абсолютный метод адресации (обозначение @#N, N — адрес).

Это косвенно-автоинкрементный метод адресации через регистр — счетчик команд, то есть @(R7)+.

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

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

Абсолютный метод адресации

Рис. 8.11. Абсолютный метод адресации

3. Относительный метод адресации (обозначение А; здесь А — смещение, относительный адрес).

Это индексный метод адресации через регистр — счетчик команд, то есть X(R7).

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

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

Относительный метод адресации

Рис 8.12. Относительный метод адресации

4. Косвенно-относительный метод адресации (обозначение @А; А — относительный адрес адреса).

Это косвенно-индексный метод адресации через регистр — счетчик команд, то есть @X(R7).

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

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

Косвенно-относительный метод адресации

Рис. 8.13. Косвенно-относительный метод адресации

Когда в команде указывается регистр содержащий адрес аргумента то это

5.1. Способы адресации в командах языка Assembler .

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

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

5.1.1. Регистровая адресация.

Операнды могут располагаться в любых регистрах общего назначения и сегментных регистрах. Для этого в тексте программы указывается название соответствующего регистра, например: команда, копирующая в регистр АХ содержимое регистра ВХ, записывается как

5.1.2. Непосредственная адресация.

Некоторые команды (все арифметические, кроме деления) позволяют указывать один из операндов непосредственно в тексте программы. Например: команда

помещает в регистр АХ число 2.

 

5.1.3. Прямая адресация.

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

mov DL,meml ;Содержимое байта памяти с символическим именем meml

;пересылается в DL

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

mov AX, 0 ;Настроим сегментный регистр ES на

mov ES,AX ;самое начало памяти (адрес 0)

mov AX,ES:[0] ;АХ=содержимое слова с адресом 0000h:0000h

mov DX,ES:[2] / D Х=содержимое слова с адресом 0000h:0002h

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

5.1.4. Базовая и индексная адресация памяти.

Относительный адрес ячейки памяти находится в регистре, обозначение которого заключается в квадратные скобки. При использовании регистров ВХ или ВР адресацию называют базовой, при использовании регистров SI или DI — индексной. При адресации через регистры ВХ, SI или DI в качестве сегментного регистра подразумевается DS; при адресации через ВР — регистр SS. Таким образом, косвенная адресация через регистр ВР предназначена для работы со стеком. Однако при необходимости можно явно указать требуемый сегментный регистр. Еще раз отметим, что во всех базовых и индексных способах адресации операндом является содержимое ячейки памяти, адрес которой находится в том или ином регистре или вычисляется сложением содержимого двух регистров.

mov AL,[ВХ] ;Сегментный адрес предполагается в DS, смещение в ВХ

mov DL,ES:[ВХ] ;Сегментный адрес в ES, смещение в ВХ

mov DX,[ВР] ;Сегментный адрес в SS, смещение в ВР

mov AL,[DI] ;Сегментный адрес в DS, смещение в DI

5.1.5. Базовая и индексная адресации памяти со смещением.

Относительный адрес операнда определяется суммой содержимого регистра (ВХ, ВР, SI или DI) и указанного в команде числа, которое называют смещением.

mas db 1,2,5,3,7,9,8,3,4 ;Массив символов

mov BX,2 ;ВХ=индекс элемента в массиве

mov D L , mas[BX] ;В D L заносится третий элемент массива

В этом примере относительный адрес адресуемого элемента массива mas вычисляется как сумма содержимого ВХ (2) и значения символического обозначения mas, которое совпадает с относительным адресом начала массива mas. В результате в регистр D L будет загружен элемент массива mas с индексом 2, т.е. число 5. Предполагается, что базовый адрес сегмента, в который входит массив mas, загружен в DS. Такой же результат даст такая последовательность команд:

mov BX,offset mas ;ВХ=относительный адрес ячейки mas

Здесь относительный адрес адресуемого элемента массива mas вычисляется как сумма содержимого регистра ВХ и дополнительного смещения, задаваемого константой 2. Последняя команда может быть записана в следующем виде:

Адресация с помощью регистров SI и DI осуществляется аналогично. При использовании регистра ВР следует помнить, что в качестве сегментного регистра по умолчанию подразумевается регистр SS.

5.1.6. Базово-индексная адресация памяти.

Относительный адрес операнда определяется суммой содержимого базового и индексного регистров.

Допускается использование следующих пар:

Если в качестве базового регистра выступает ВХ, то в качестве сегментного подразумевается DS (первые две команды); при использовании в качестве базового регистра ВР сегментным регистром по умолчанию назначается SS (вторые две команды). При необходимости можно явно указать требуемый сегментный регистр.

mov ВХ,[ВР][SI] ;В ВХ засылается слово из стека(сегментный

;адрес в SS), а смещение вычисляется как

;сумма содержимого ВР и SI

mov BX,ES:[BP][SI] ;В ВХ засылается слово из сегмента, адрес которого

;находится в ES, а смещение вычисляется как

;сумма содержимого ВР и SI

mov ES:[BX+DI],АХ ;В ячейку памяти, сегментный адрес которой

;хранится в ES, а смещение равно сумме

;содержимого ВХ и DI, пересылается содержимое АХ

5.1.7. Базово-индексная адресация памяти со смещением.

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

mov mas[ВХ][SI],10 ;Число 10 пересылается в ячейку памяти,

;сегментный адрес которой хранится в DS, а

;смещение равно сумме содержимого

;ВХ и SI и смещения ячейки mas

mov AX,[BP+2+DI] ;В АХ пересылается из стека слово,

;смещение которого равно сумме

;ВР, DI и «добавки» 2

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

mov DL,mas[BX] ;В BХ заранее занесено число 3

mov DL,[SI][ВХ] ;В BХ заранее занесено число 3, а в SI — смещение mas

приведут к загрузке в регистр DL четвертого элемента массива mas (если выполняются описанные в комментариях условия). Однако команды с использованием различных способов адресации занимают различный объем памяти и выполняются за разное время. Так, первая из приведенных выше команд потребует для выполнения 15 машинных тактов, вторая — 18, а третья — 16. Разница невелика, однако при многократном выполнении команд в циклах суммарный эффект может быть значителен. С другой стороны, первые две команды занимают в памяти по 4 байта, а третья — только 2. Таким образом, тщательный выбор способов адресации позволяет в какой- то степени оптимизировать программы по времени выполнения или требуемой памяти, а иногда и по тому и по другому.

основы алгоритмизации синергия. Основы алгоритмизации и программирования. Тема Устройство компьютера. Оперативная память, процессор, регистры процессора. Аппаратный стек. Содержание темы

Единственный в мире Музей Смайликов

Самая яркая достопримечательность Крыма
Скачать 186.29 Kb.

Тема 1. Устройство компьютера. Оперативная память, процессор, регистры процессора. Аппаратный стек.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *