Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Арифметические и логические команды




Все рассмотренные выше команды были либо командами перехо­дов, либо командами пересылки информации. Обратимся теперь к командам обработки информации. К ним относятся команды сложе­ния, вычитания, логического И, логического ИЛИ, команды сдвигом и т. д. В качестве типичного представителя этого класса рассмотрим «сложение с- регистром и переносом» ADC R.

На рис. 4.13 показаны потоки информации, когда R задает любой общий регистр в диапазоне 016, . . ., Е16. В соответствии с табл. 4.2 это однобайтовая команда. Следовательно, после второго синхроим­пульса первого и единственного машинного цикла содержимое акку­мулятора и регистра R может быть подано на входы АЛУ в качестве операндов. АЛУ по этим двум операндам и переносу С (считая его пере­носом в младший разряд) вычисляет 8-разрядную сумму и новое зна­чение переноса.

 

 

Рис. 4.13 Информационные потоки в фазе выполнения команды ADC R, когда R ¹11112

 

Таким образом, по третьему синхроимпульсу машинного цикла сумма передается в аккумулятор, а результирующий пере­нос — в триггер переноса С.

Выполнение команды ADC R при R = 11112 показано на рис. 4.14.

 

Рис. 4.14 Информационные потоки в фазе выполнения команды

ADC R, когда R = 11112

 

В этом случае второй машинный цикл затрачивается на выборку операнда из памяти по адресу на регистрах Н и L. Этот операнд вре­менно заносится в младшие разряды регистра адреса данных и оттуда через R-селектор в нужный момент подается на вход АЛ У.

 

Команды ввода/вывода

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

Этот цикл иллюстрирует рис. 4.15

 

 

Рис. 4.15 Информационные потоки в фазе выполнения команды OUT

 

По первому синхроимпуль­су третьего машинного цикла содержимое младшей половины регистра адреса данных подается на адресную шину, а содержимое аккумуля­тора через г-селектор — на шину данных. Все устройства вывода де­кодируют содержимое младшей половины адресной шины. Однако только то устройство, которое опознает код на адресной шине как свой код, подает разрешающий сигнал на прием информации с шины дан­ных в свой входной регистр. По второму синхроимпульсу третьего машинного цикла БУС подаст сигнал на линию «вывод» шины управ­ления, который стробирует передачу содержимого шины данных в открытый для приема регистр.

 

Специальные команды

Это последний класс команд в наборе команд микропроцессора. Они улучшают как эффективность программ, так и удобство их на­писания.

Поскольку пару общих регистров Н и L можно использовать для обращения к ячейкам памяти при косвенной адресации, команды IHL и DHL увеличения и уменьшения значения, хранящегося в этих регистрах, оказываются очень удобными для модификации адре­сов. Команды разрешения и запрещения прерываний необходимы для обслуживания запросов прерывания различных устройств. Пустая команда (NOP) реализует программную за­держку времени. Она бывает нужна при взаимодействии с медлен­ными устройствами ввода/вывода. Команда останова (HLT), очевид­но, позволяет закончить выполнение программы.

Две оставшиеся команды в классе специальных команд это команды PUSH и POP, работающие со стеком. Когда выполняется подпрограм­ма или программа обработки прерывания, ей для ввода, вывода и об­работки данных нужны общие регистры. Однако, как правило, они содержат информацию, нужную основной программе или подпрограм­ме. Поэтому содержимое трех верхних общих регистров Асс, Н и L вместе с содержимым триггера переноса С можно запомнить в стеке командой PUSH и затем в нужный момент восстановить командой POP. Это позволяет использовать регистры Асс, Н, L и триггер С при вы­полнении подпрограммы и вместе с тем сохранять их содержимое. Более того, поскольку информация сохраняется в стеке, процедура сохранения/восстановления может быть повторена в подпрограмме или в программе обработки прерываний, обеспечивая много уровней вложения.

Фаза выполнения команды PUSH проходит за два синхроимпульса. По третьему синхроимпульсу командного цикла в стек опускается значение переноса С и аккумулятора, а затем по следующему синхро­импульсу, который фактически будет первым импульсом в следующем командном цикле, в стек опускается значение регистров Н и L. Такое совмещение командных циклов в данном случае вполне допустимо, поскольку информационные потоки не интерферируют друг с другом. Потоки информации в фазах выполнения команд POP и PUSH в точности противоположны.

В приложении в конце книги приведены все команды нашего ил­люстративного микропроцессора. Табл. П1 содержит команды в ал­фавитном порядке, а табл. П2 — в порядке кодов операций.

 

 

Способы адресации

В процессе изучения системы команд мы видели, что некоторые команды ссылаются на ячейки памяти. Для одних команд — это ячей­ки, откуда нужно прочитать или куда нужно записать обрабатывае­мые данные, для других — это ячейки с командами, на которые нужно передать управление. И в том, и в другом случае адрес ячейки каким-то образом должен быть задан. Вообще говоря, часть команды, которая используется для задания адреса памяти, называется полем адреса. Поле адреса может содержать: фактический адрес ячейки памяти, как, например, в команде «загрузка регистра» LDR; или же номер об­щего регистра, содержащего адрес ячейки памяти, как, например, в команде ADD при R = 1111; или же само поле адреса может быть объек­том ссылки, как, например, в команде LRI. В последнем случае само поле адреса содержит данные, участвующие в выполняемой операции.

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

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

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

Наиболее естественный способ адресации — это прямая адресация. При прямой адресации в команде просто задается эффективный адрес, т. е. исходный адрес равен эффективному. Если при обращениях к памяти пользоваться только прямой адресацией, то команды, вообще говоря, будут состоять из нескольких слов. В 8-разрядном микро­процессоре, например, при памяти размером в 65536 байтов для пря­мой адресации нужен адрес из двух байтов (16 разрядов). Предположив, что еще один байт нам потребуется для задания самой команды, мы получим команду из 3 байтов.

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

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

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

Индексная адресация

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

Обычно предусматриваются специальные команды для увеличения и уменьшения содержимого индексных регистров, и это облегчает последовательную обработку элементов таблиц в программных цик­лах. Иногда содержимое индекс-регистров автоматически увеличива­ется или уменьшается каждый раз, когда регистр используется для образования эффективного адреса. Этот способ называется автоиндек­сированием.

Косвенная адресация

Косвенная адресация — это очень эффективный и важный способ адресации в микропроцессорах. При косвенной адресации исходный адрес служит указателем на ячейку, в которой находится эффектив­ный адрес. Таким образом, исходный адрес это «адрес адреса».

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

Примером регистровой косвенной адресации может служить ко­манда ADD R при R = 1111. Значение 1111 в младших четырех битах команды — это ссылка на общие регистры Н и L. Содержимое этих ре­гистров воспринимается как 16-разрядный эффективный адрес.

Относительная адресация

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

Страничная адресация

Часто объем памяти микропроцессора превышает «адресное про­странство», т. е. максимальное число адресов для данного формата команд. В таком случае память можно разбить на страницы, размер которых определяется максимальным числом ячеек, адресуемых в команде. Например, если на адрес отводится только 8 разрядов, то каждая страница должна содержать 28=256 ячеек. Страницам присва­иваются номера в последовательном порядке, начиная с 0. В нашем примере страница 0 будет содержать ячейки от 0 до 255, страница 1 — ячейки 256—511 и т. д. При таком подходе программный счетчик мож­но считать состоящим из двух частей. Старшие разряды — это номер страницы, а младшие — адрес слова внутри страницы.

Метод адресации к текущей странице сводится к тому, что исход­ный адрес в команде считается адресом внутри той страницы, где на­ходится сама команда, т. е. «сдвигом» относительно начала страницы. Этот метод позволяет адресовать ячейки только в текущей странице, а эффективный адрес получается, как сумма адреса начала страницы и исходного адреса в команде. Таким образом, старшие разряды эффек­тивного адреса — это просто старшие разряды программного счетчика, а младшие разряды — это исходный адрес в самой команде.

Другой метод страничной адресации называется адресацией к нуле­вой странице. Исходный адрес трактуется как адрес внутри нулевой страницы. Старшие разряды эффективного адреса полагаются равны­ми нулю, а младшие — равными исходному адресу. Адресация и к те­кущей, и к нулевой странице является одной из форм относительной адресации и называется страничной относительной адресацией.

Описанные методы страничной адресации позволяют обращаться только к ячейкам нулевой и текущей страниц. Чтобы обратиться к лю­бой ячейке памяти, можно воспользоваться косвенной адресацией. Если, например, нужно обратиться к ячейке в странице 7, а програм­мный счетчик показывает, что текущая команда находится в странице 3, то адрес, относящийся к странице 7, нужно запасти, либо в стра­нице 0, либо в странице 3, и тогда операнд в странице 7 будет досту­пен по косвенному адресу.

 

 

Некоторые другие команды,










Последнее изменение этой страницы: 2018-04-12; просмотров: 274.

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