logo search
КС-ZAO / Лекции ЦЭВМруский вариант11

§14.3 Пояснения к некоторым командам

Мнемоническая форма записи команд наиболее удобна для запоминания и работы программиста. Однако МП «понимает» лишь команды, представленные в виде двоичных кодов.

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

Для сокращения числа строк табл. 14.1 некоторые однотипные .команды объединены в группы. Так, все команды пересылки данных между регистрами объединены одним мнемоническим обозначением MOVrdrs, где га означает название регистра-приемника, a rs — название регистра-источника информации. В поле адреса регистра-источника записан условный трехразрядный двоичный код SSS, а в поле адреса регистра-приемника условный код DDD, как показано на рис. 14.6, б. В частном случае, при пересылке содержимого регистра В в регистр С SSS == 000, а DDD =001.

Рис. 14.6. Команды пересылки данных между конкретными регистрами В и С (а) и между условными регистрами г, и г^ (б)

Рис. 14.7. Команды пересылки содержимого регистра г^ в ячейку памяти М, адрес которой хранится в регистрах Н и L (а), и содержимого ячейки памяти М в регистр г^ (б)

Ранее мы отмечали, что условная ячейка памяти М, адрес которой хранится в регистрах Н и L, имеет код 110. Если в команде пересылки этот код расположен на месте регистра-приемника (рис. 14.7, а), то выполняется команда MOVMrs, пересылки в память из регистра Гз.

Если код 110 находится на месте регистра-источника, то происходит пересылка информации из ячейки памяти М в регистр га по команде MOVrd, М (рис. 14.7, б).

Особенностью арифметических команд является то, что результат выполнения команды всегда хранится в аккумуляторе.

К числу арифметических команд относятся команды инкремента INR и декремента DCR, команды сложения и вычитания содержимого аккумулятора и регистра, команды сравнения содержимого аккумулятора А с содержимым регистра Гэ или ячейки памяти М. При выполнении операций сравнения изменяются соответствующие разряды регистра признаков. Содержимое аккумулятора при этом остается неизменным.

При выполнении логических команд результат также передается в аккумулятор. Во всех командах, предусматривающих логические сложение, умножение, суммирование по модулю 2, отрицание, действия производятся параллельно над всеми битами операндов. Так, при выполнении команды ORA М производится поразрядное логическое сложение содержимого аккумулятора и содержимого ячейки памяти М. Если до начала команды (А) = 11000010, а (М) == 11011000, то после ее выполнения содержимое аккумулятора будет 11011010.

Операции сдвига также выполняются командами логической группы. Различают две разновидности команд сдвига: сдвиг циклический и сдвиг с переносом. Примером команды первого типа служит команда RLC сдвиг циклический влево. Она производит сдвиг содержимого аккумулятора А на один разряд влево. При этом бит младшего разряда устанавливается в состояние бита старшего разряда аккумулятора; бит признака переноса CY также устанавливается в состояние старшего разряда аккумулятора (рис. 14.8, а):

Примером команды второго типа является команда RAL сдвиг влево с переносом. При выполнении этой команды производится сдвиг влево содержимого аккумулятора на один разряд. При этом бит пере носа устанавливается в состояние бита старшего разряда аккумулятора, а бит младшего разряда в состояние бита переноса (рис. 14.8, б):

Рис. 14.8. Команды сдвига циклического влево (а) и сдвига влево с переносом (б)

Рис. 14.9. Условные команды перехода (а), вывода (б) и возврата (в)

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

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

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

Условная команда передачи управления либо осуществляет, либо не осуществляет изменение хода вычислительного процесса в зависимости от состояния одного из разрядов регистра условий. Все условные команды имеют одинаковую трехбайтную структуру, показанную на рис. 7.2L Код условия выполнения команды задается полем ССС кода операции этой команды.

Каждое условие имеет мнемоническое обозначение, которое входит в состав мнемонического обозначения команды. В табл. 14.2 приведены мнемонические обозначения

Таблица 14.2.

Обозначение признака условий

Поле ССС

Состояние разряда признаков для выполнения условий

NZ

000

2=0 '

Z

0 0 1

Z= 1

NC

0 1 0

с==о

С

0 1 1

С== 1

РО

1 0 0

Р=0

РЕ

1 0 1

р= 1

Р

1 1 0

S= 1

М

1 1 1

S== 1

Соответствие поля условных переходов и соответствующие ССС признакам условий им значения поля ССС. Мнемоническое обозначение команды получается объединением символа перехода J (JMP) с обозначением одного из условий. Так, команда условного перехода JNZ по нулевому значению признака Z образуется объединением символа J с мнемоническим обозначением условия NZ.

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

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

Команды безусловного и условного вызовов (CALL и CALL IF) используются для обращения к подпрограммам, расположенным вне рабочей зоны основной памяти. Мнемоническое обозначение команды условного вызова подпрограмм получается объединением символа С (CALL) — «вызов» с одним из мнемонических обозначений признаков условий, приведенных в табл. 14.2. Например, команда условного вызова подпрограммы CZ по единичному значению признака Z образуется объединением символа С с мнемоническим обозначением условия Z так же, как это делалось для команд условного перехода.

В отличие от рассмотренных выше команд условного или безусловного перехода эти команды всегда предусматривают возможность возврата в прерванную основную программу. Для этого любая команда вызова программы прежде, чем передавать управление команде по указанному адресу, заносит в стек адрес возврата к основной программе. Содержимое старшего разряда программного счетчика (РСН) заносится в стек по адресу (SP) — 1, а младший полуадрес (PCL ) — в стек по адресу (SP) — 2. Содержимое указателя стека при этом уменьшается на две единицы:

(SP)—2-> (SP).

Если условие, заданное полем ССС, выполняется, то в дальнейшем происходит переход по адресу, записанному во втором и третьем байтах аналогично тому, как это делается при операциях условного перехода. Если же условие, заданное полем ССС, не выполняется, то ЦП переходит к выполнению следующей по порядку команды, для чего содержимое программного счетчика (PC) увеличивается на три единицы:

(РС)+3->(РС).

Любая подпрограмма всегда должна заканчиваться командой безусловного возврата RET или командой возврата по условию RET IF.

Команды условного или безусловного возвращения к выполнению основной программы передают из стека адрес очередной записанной там команды основной программы в счетчик команд (PC). При этом старший полуадрес (РСН) считывается из стека по адресу (SP) — 1, а младший полуадрес (PCL) по адресу (SP). Содержимое указателя стека увеличивается на две единицы.

Если условие возврата, заданное полем ССС, не выполняется, то происходит переход к выполнению команды по следующему очередному адресу.

Содержимое указателя стека остается при этом неизменным.

Мнемоническое обозначение команды условного возврата получается объединением символа R (RETURN) — «возврат» с мнемоническим обозначением одного из признаков условий, показанных в табл. 14.2. Например, команда возврата RNC по нулевому значению признака переноса (CY = 0) обозначается объединением символа R с мнемоническим обозначением признака NC.

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

Команда RST осуществляет повторный пуск МП и используется в операциях с вектором прерываний NNN. При поступлении запроса на прерывание МП необходимо сообщить начальный адрес подпрограммы, обслуживающей прерывание данного типа. Этот адрес формируется с помощью команды RST.

Команда RST — однобайтная. Ее код показан на рис. 14.10, а. При выполнении команды RST содержимое счетчика команд засылается в стек. При этом старший полуадрес последующей команды из счетчика команд (PC) переносится по адресу (SP) — 1, а младший полуадрес в стековую область памяти по адресу (SP) — 2. Содержимое стека при этом уменьшается на две единицы.

Указанные действия обеспечивают возврат к основной программе после завершения прерывающей программы. После выполнения команды RST содержимое программного счетчика (PC) формируется от устройств на прерывание в виде шестнадцатиразрядного адреса, содержащею поле NNN, как показано на рис. 14.10, б. Этот адрес и является началом программы обслуживания прерывания данного типа.

Рис. 14.10. Формирование кода NNN команды RST:

а—команда RST; б—адрес следующей команды после выполнения команды RST; в—запросы

Трехразрядное поле NNN обеспечивает возможность формирования начальных адресов для восьми различных программ обслуживания прерываний. Например, для программы прерывания номер три, имеющей код NNN = 01 Ig = Зщ, начальный адрес сформируется в виде 0000 0000 0001 lOOOg (или 0018J. При появлении запроса ка прерывание команда RST 4юрмируется автоматически. Поэтому указанные восемь кодовых комбинаций нельзя использовать для каких-либо других целей, кроме задания начальных адресов подпрограмм обслуживания прерываний.

Формирование команды RST происходит следующим образом. При поступлении запроса на прерывание от одного из внешних устройств контроллер прерываний посылает на вход INT МП запрос на прерывание. Если прерывание разрешено, то МП ответит сигналом IN Т А подтверждения запроса прерывания. По сигналу IN Т А контроллер посылает на шину данных код NNN, который указывает номер устройства, вызвавшего прерывание. В это же время данные с шины данных вводятся в регистр команд МП. По входам шины данных, подключенным к контроллеру прерываний, в регистр команд передается код NNN. Все остальные входы шины данных находятся в отключенном состоянии, поэтому в соответствующие разряды регистра команд будут записаны единицы. В результате в регистре команд сформируется код команды, показанный на рис. 14.10, а.

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

Команды ввода IN и вывода OUT используются для взаимодействия МП с внешними устройствами. Обе команды являются двухбайтными. По команде IN информация из порта ввода по шинам данных передается в аккумулятор. По команде OUT происходит обратная передача данных из аккумулятора в устройство вывода. Адрес устройств вводавывода определяется содержимым второго байта команд (в табл. 14.1 указан как НОМ).

Каждый МП имеет ряд команд, которые не передают и не обрабатывают информацию, а используются лишь для управления работой МП. К таким командам относится, например, команда останова HLT. При ее появлении текущая программа останавливается до тех пор, пока не появится запрос на прерывание. При поступлении запроса на прерывание, если оно разрешено, МП переходит к выполнению первой команды программы, обслуживающей данное прерывание. Разрешение или запрет прерывания можно осуществить программным путем. Если, например, в программе появляется команда DI (запрет прерывания), то МП игнорирует запросы на прерывание до тех пор, пока в программе не появится команда EI (прерывание разрешено).

Если после подачи команды DI (прерывание запрещено) поступит команда HLT, то МП должен остановиться, пока не поступит запрос на прерывание. Однако вследствие того, что прерывание запрещено, запрос на прерывание проигнорируется. МП может быть пущен вновь только сигналом RESET (сброс). При этом счетчик команд обнуляется и выполнение команды начинается сначала. Следует иметь в виду, что при подаче сигнала RESET сброс триггеров регистра признаков не происходит и они остаются в том состоянии, в котором их застал сигнал сброса.