ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 28.12.2024
Просмотров: 2004
Скачиваний: 3
СОДЕРЖАНИЕ
13.1. Классификация микропроцессоров и особенности их использования в цифровой аппаратуре.
13.2. Типовые структуры микропроцессорных систем.
13.3. Принцип программного управления в микропроцессорной системе.
13.4. Организация ввода-вывода в микропроцессорной системе.
13.5. Интерфейсы микропроцессорных систем.
13.6. Управляющие сигналы типового микропроцессора.
13.7. Структура типового микропроцессора.
13.8. Способы адресации данных.
13.9. Типовая система команд микропроцессора.
13.9.1. Команды пересылки данных.
13.9.2. Команды выполнения арифметических операций.
13.9.3. Команды выполнения логических операций.
10. Команда СМР A,r позволяет сравнивать два числа, находящихся в аккумуляторе и в регистре r. Сравнение осуществляется вычитанием из содержимого аккумулятора содержимого регистра r. Вычитание производится без сохранения результата в аккумуляторе. Результат вычитания проявляется только в воздействии на флаги. Если операнды равны, флаг нуля ZF устанавливается в единицу. Если значение числа, находящегося в аккумуляторе, меньше значения второго числа, находящегося в регистре r, и оба числа положительны и заданы в прямых кодах, то устанавливается в единицу флаг переноса СF. Если же сравниваются два знаковых числа в дополнительных кодах, то в случае вычитания из меньшего числа большего в единицу установится флаг знака SF. В противных же случаях все эти флаги будут иметь нулевые значения.
11. Команда СМР A,M аналогична предыдущей, но имеет косвенную адресацию данных, т.е. вычитает без сохранения результата из содержимого аккумулятора содержимое косвенно адресуемой через регистровую пару или адресный регистр-указатель ячейку памяти M.
12. Команда CMPI A,data сравнивает путем вычитания содержимое аккумулятора с операндом data, заданным в команде в виде константы. Эта команда имеет непосредственную адресацию данных. В остальном назначение команды аналогично предыдущим двум.
13. Команда СМ А инвертирует содержимое аккумулятора.
14. Команда RLC A выполняет циклический (замкнутый) сдвиг содержимого аккумулятора влево на один разряд через флаг переноса CF. Из описания команды видно, что все разряды сдвигаются влево на одну позицию (ai+1) (ai); в самый младший разряд записывается ранее установленное значение флага переноса (a0) (CF); выдвигаемый старший разряд фиксируется во флаге переноса (CF) (an). Команды сдвига часто используются для организации операций умножения и деления, т.к. сдвиг двоичного кода влево на один разряд равносилен его умножению на 2, а сдвиг вправо на один разряд - делению на 2. Только необходимо помнить, что рассмотренная команда может исказить результат умножения на 2, поскольку она возвращает обратно в младший бит сдвигаемого байта значение флага переноса. Для корректного же умножения на 2 в младшем бите должен быть установлен 0. Для этого можно перед началом сдвига обнулить флаг переноса, например, командой AND A,A или иной специальной, если такая имеется в системе команд микропроцессора. Так же можно воспользоваться командой арифметического сдвига содержимого аккумулятора влево, которая будет рассмотрена дальше.
15. Команда RRC A выполняет циклический (замкнутый) сдвиг содержимого аккумулятора вправо на один разряд через флаг переноса CF по схеме, аналогичной описанной в предыдущей команде. Путем использования команды RRC A можно определить, например, среднее арифметическое двух значений. Для этого нужно на первом этапе выполнить сложение двух значений, среднее арифметическое которых необходимо определить, используя для этого команду ADD A,r , например. В результате сложения может либо возникнуть перенос, либо не возникнуть, который зафикисируется во флаге переноса единичным или нулевым значением. Поэтому для корректного деления пополам полученной суммы, при сдвиге вправо необходимо учесть этот факт. Это и сделает команда RRC A , вернув значение флага переноса в самый старший разряд результата.
16. Команда RAL A выполняет циклический (замкнутый) сдвиг содержимого аккумулятора влево на один разряд. При этом старший бит замыкается на младший (a0) (an) и он же выдвигается во флаг переноса (CF) (an).
17. Команда RAR A выполняет циклический (замкнутый) сдвиг содержимого аккумулятора вправо на один разряд по схеме, аналогичной описанной в предыдущей команде, но в обратном направлении.
18. Команда SAL A является командой арифметического сдвига влево, или, как его еще называют, разомкнутого или простого. Отличие этой команды от предыдущих команд циклического сдвига влево заключается в том, что в младший бит при каждом сдвиге записывается ноль (a0) 0. Старший бит как и в предыдущих командах сдвига влево выдвигается во флаг переноса. Именно этой командой можно выполнить умножение аккумулятора на 2 без каких либо дополнительных манипуляций над флагом переноса CF.
19. Команда SAR A выполняет разомкнутый арифметический сдвиг вправо, но по несколько иной схеме, нежели команда арифметического сдвига влево. Отличие заключается в том, что самый старший разряд при сдвиге не меняет своего значения (an) (an), т.е. сдвигаются все разряды вправо, кроме старшего. Сохранение значения самого старшего разряда позволяет корректно реализовывать арифметические операции умножения и деления над знаковыми числами в дополнительных кодах.
В большинстве случаев микропроцессоры и микроконтроллеры не обладают всеми перечисленными командами командами сдвигов. Однако, дополняя имеющиеся у данного типа микропроцессора команды сдвига другими командами, можно получить результат недостающих команд. Например, получить арифметический сдвиг влево из циклического сдвига можно путем предварительного обнуления флага переноса CF. Аналогичный сдвиг вправо можно выполнить путем наложения на старший бит сдвинутого байта флага знака SF.
13.9.4. Команды передачи управления.
При выполнении программы содержимое счетчика команд PC непрерывным образом увеличивается, поэтому команды извлекаются из памяти и выполняются в порядке возрастания их адресов. Ход выполнения программы можно изменить, если в счетчик команд PC поместить адрес, отличающийся от адреса очередной команды. В этом случае микропроцессор перейдет к выполнению программы с места, указанного новым адресом (адресом перехода). Адрес перехода может указываться напрямую в команде в виде числа или метки, а также косвенно содержаться в регистровой паре или специальном адресном указательном регистре, указанными в команде перехода. При выполнении команды перехода адрес, указанный в команде, записывается в счетчик команд PC, причем прежнее содержимое счетчика команд теряется. Переход может быть безусловным или условным. Если безусловные переходы реализуются всегда, то условные - только при истинном значении проверяемого условия условия. Если условие не удовлетворяется, то выполняется следующая команда программы.
1. Команда JMP addr является командой безусловного перехода. Эта команда адрес addr, указанный в ней в качестве операнда, записывает в счетчик команд PC. После отработки этой команды программа начнет выполняться с нового адреса, помещенного в счетчик команд.
2. Команда J-CON addr является командой условного перехода. В качестве условий рассматриваются нулевые или единичные значения флагов ZF, СF, РF, SF и OF флагового регистра. В место сокращения -CON подставляется мнемоника конкретного условия, при котором должен произойти переход: NZ - ненулевой результат; Z - нулевой результат; NC - отсутствие переноса в результате; C - наличие переноса в результате; PO - нечетное число единиц в коде результата; PE - четное число единиц в коде результата; P - неотрицательный результат; M - отрицательный результат. Например, команда условного перехода J-CON addr записывается JNZ addr, если условие перехода заключается в том, что не был установлен флаг нуля, т.е. ZF=0 (ранее выполненная команда не дала нулевого результата). При выполнении этого условия адрес перехода, содержащийся в команде в качестве операнда запишется в счетчик команд PC и микропроцессор перейдет к выполнению программы с нового адреса. Если условие не удовлетворится, т.е. ZF=1 (предыдущий результат был равен нулю), то выполняется команда, непосредственно следующая в программе за командой JNZ addr.
Если в программе встречаются одинаковые последовательности команд, то для того, чтобы не записывать такие последовательности по несколько раз в памяти, их выделяют в подпрограммы. Переход от выполнения программы к выполнению подпрограммы производится с помощью команд вызова подпрограмм. При выполнении такой команды в счетчик команд PC также записывается адрес, который указывается в команде (адрес первой команды подпрограммы), но предварительно прежнее содержимое счетчика команд PC, т.е. адрес команды, которая следует в программе за командой вызова (адрес возврата или точка возврата из подпрограммы), запоминается в стеке.
3. Команда CALL addr является командой вызова подпрограммы. Команда записывает в счетчик команд PC адрес первой команды подпрограммы, указанный в команде, и предварительно в стек на сохранение отправляет адрес возврата в основную подпрограмму (адрес команды, следующей за командой CALL addr). При этом, поскольку в стек записывается два байта адреса, указатель стека SP в зависимости от типа микропроцессора смещается вверх или вниз на две ячейки. В некоторых микропроцессорах команды вызова подпрограмм могут быть как безусловными, так и условными.
4. Команда RET служит для возврата из подпрограммы. Она является последней командой любой подпрограммы. По этой команде адрес возврата, сохраненный ранее в стеке при уходе на подпрограмму, пересылается обратно в счетчик команд PC. При этом указатель стека SP смещается на две ячейки в обратном направлении. После возврата из подпрограммы работа программы продолжится с того места, где она была прервана обращением к подпрограмме. Поскольку в стеке реализуется принцип «последний записанный считывается первым», то в случае вызова вложенных подпрограмм во время уже выполняющихся подпрограмм (как и в случае многоуровневых прерываний), адреса возврата будут извлекаться из стека в обратном порядке по сравнению с их размещением в стеке при уходе на подпрограммы. Таким образом, работа программы микропроцессора и последовательность вызова подпрограмм и возврата из них не будут нарушены.