|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Команды пересылокЭти команды делятся на команды однобайтовых или двухбайтовых пересылок и команды обмена байтами. Типичным примером команды однобайтовой пересылки служит команда межрегистровой пересылки, мнемонический код которой имеет вид . В левой части, до двоеточия записан мнемонический код команды, а справа – его реализация, также записанная в некоторой символической форме. Буквы MOV взяты из двух английских слов move register (осуществить пересылку между двумя регистрами). Команды – это группа операций, отличающихся друг от друга названиями регистров, между которыми осуществляется пересылка. В частности, на место буквы R в мнемоническом коде подставляется имя конкретного регистра, из которого осуществляется пересылка, а на место символов R l – регистра, в который осуществляется пересылка. Все только что сказанное символически изображено в виде записи . Значок всегда обозначает помещение слова в запоминающую ячейку или регистр, имя которой указано у острия стрелки. Имеется в виду, что передаваемое слово извлекается из запоминающей ячейки или регистра, имя которой указано с противоположной стороны стрелки. Для указанной группы команд межрегистровых пересылок, использующей регистровую адресацию, однобайтовая команда имеет следующий вид: . Два левых (старших) разряда образуют код операции пересылки, три разряда, обозначенные буквами DDD, соответствуют коду регистра – приемника информации (destination), а разряды, обозначенные буквами SSS, – коду регистра-источника информации (source). Коды регистров определяются согласно табл.1. Всего в системе команд имеется 63 команды типа MOV, которые можно представить в виде табл.2. В заголовке каждой строки даны комбинации из четырех старших двоичных символов кода операций, а в заголовке каждого столбца – комбинации
из четырех младших двоичных символов кода операций. Например, первая строка табл.2 имеет заголовок 0100, третий слева столбец – 0010. На пересечении первой строки и третьего столбца имеем команду . По этой команде, имеющей код , восьмиразрядное двоичное слово из регистра D пересылается в регистр B и заменяет ранее находившееся там слово. При этом содержимое регистра D сохраняется – это общее условие для всех пересылок. Рассмотренная комбинация и все остальные, перечисленные в табл.2, не являются кодами операции в чистом виде, поскольку в неявной форме они содержат и адреса регистров. Это специфическая особенность набора команд микропроцессора К580ВМ80А.
При последовательном просмотре табл.2. должно возникнуть недоумение при чтении команды с кодом операции , поскольку мнемонический код этой команды соответствует операции . Это значит извлечь слово из регистра В и поместить его в тот же регистр. Только в регистр помещается не само слово, а его инверсия, то есть другое слово, в котором все единицы исходного заменены нулями, а все нули – единицами. Например, инверсией слова будет . В этом случае в операции участвуют не два, а один регистр общего назначения (РОН). Предыдущее содержимое уничтожается и вместо операции пересылки выполняется операция инверсии. Аналогичные операции имеются и для других регистров. В коде операции , мнемонический код которой имеет вид , буквой M обозначается ячейка памяти, адрес которой хранится в паре регистров HL. При этом код операции требует выполнения следующей последовательности действий: извлечь содержимое пары регистров HL и использовать его в качестве адреса ячейки памяти, содержимое которой поместить в регистр В микропроцессора. Содержимое ячейки памяти при этом остается неизменным. Коду операции соответствует мнемонический код . Буквой А в данном случае обозначен регистр-аккумулятор (он же регистр результата). По этой команде содержимое регистра-аккумулятора будет скопировано в регистр В. Четвертая сверху строка табл.2 обозначена комбинацией 0111. Первые шесть команд этой строки означают, что содержимое соответствующего регистра В, С, D, E, H или L передается в ячейку памяти M, адрес которой записан в паре регистров HL. Имеет смысл только сделать замечание относительно команд с кодами и . Каждая из них предусматривает, что в ячейку памяти с некоторым адресом должна быть передана половина этого адреса. Вряд ли можно представить себе программу, в составе которой понадобится такая операция. Однако проще иметь в перечне пару команд, никогда не используемых, чем предусматривать специальные меры, запрещающие появление подобных комбинаций. Команда с кодом операции не относится к рассматриваемому классу. Это команда останова HLT, по которой прекращается выполнение каких бы то ни было операций. Команды последней строки табл.2 предусматривают передачу в регистр-аккумулятор содержимого любого из РОН или ячейки памяти M, адрес которой хранится в регистровой паре HL, или, наконец, содержимого того же регистра-аккумулятора, но с инверсией. Относясь к одной и той же группе, команды могут почти не отличаться или же отличаться очень сильно. Но главное их свойство состоит в том, что каждый код операции однозначно без каких-либо нечеткостей или необходимости обращения к дополнительной информации указывает ту последовательность действий, которая должна быть выполнена в микропроцессорной системе. Система организации команд проявляется при их записи в виде таблицы, что позволяет достаточно просто ориентироваться во множестве различных команд. Кроме рассмотренной группы команд имеются еще шесть семейств операций однобайтовых пересылок. Операции . Наличие символа D 8 означает, что сама команда имеет двухбайтовый формат. Смысл этого семейства операций в том, что операнд D 8, то есть содержимое второго байта команды, передается в регистр, имя которого стоит на месте символа R. Всего таких команд восемь. Они позволяют записать операнд в любой из РОН, в ячейку памяти M, адрес которой хранится в регистровой паре HL, или в регистр-аккумулятор. Сам мнемонический код MVI происходит от английских слов move immediate (переслать слово, входящее непосредственно в состав команды). Семейство операций . STAX расшифровывается как store accumulator indirect (осуществить косвенное размещение содержимого аккумулятора). Символом YZ обозначается содержимое регистровой пары ВС или DE, М (YZ) – ячейка памяти с адресом, помещенным в скобки после буквы М. В данном случае это ячейка памяти, адресом которой является содержимое регистровой пары, а имя помещено на место символов YZ. Содержимое регистра-аккумулятора передается в соответствующую ячейку памяти. Всего таких команд две, которые соответствуют двум возможным различным регистровым парам. Эти команды имеют однобайтовый формат, так как согласно существующему условию регистровую пару, если известно, что это именно пара, можно называть лишь именем первого регистра, то есть мнемонические коды команд будут иметь вид либо , либо . Семейство команд . LDAX обозначает load accumulator indirect (загрузить аккумулятор косвенно), то есть осуществить пересылки аналогичные предыдущему семейству, но в противоположную сторону. Команда . STA – store accumulator direct (осуществить прямое размещение содержимого аккумулятора). Команда имеет трехбайтовый формат. Содержимое регистра-аккумулятора передается в ячейку памяти М, адрес которой записан во втором и третьем байтах команды. Команда . STA – load accumulator direct (загрузить аккумулятор прямо). Команда по своему смыслу является обратной к предыдущей. Команда означает, что содержимое регистровой пары HL передается в регистр-указатель стека SP (stack pointer). Следующую подгруппу команд составляют команды двухбайтовых пересылок. Символические обозначения первых трех команд двухбайтовых пересылок имеют следующий вид: ; ; . Первая из этих команд не требует комментариев с тем исключением, что буквами YZ обозначается содержимое регистровых пар ВС, DE, HL или регистра SP. По второй команде содержимое регистровой пары HL передается в две соседние ячейки памяти. Подобный прием является типовым. Во всех операциях, выполняемых над словом длиной два байта, если при этом участвует память, указывается адрес одной ячейки, а обращение производится к двум соседним. Третья команда по смыслу противоположна предыдущей команде. Рассмотрим две оставшиеся команды двухбайтовых пересылок. Их символические описания имеют вид: ; . Символ YZ обозначает содержимое регистровой пары ВС, DE, HL или регистра слова состояния PSW. Команда PUSH предусматривает пересылку содержимого одной из перечисленных регистровых пар в две соседние ячейки памяти M (SP-1) и M (SP-2). При этом в регистр-указатель стека также засылается адрес последней ячейки памяти. Данные действия представляют типичную операцию заполнения стека. Смысл стековой организации памяти состоит в том, что к моменту начала любой операции в регистре-указателе стека хранится адрес последней занятой ячейки. Команда POP по смыслу противоположна команде PUSH. К командам пересылок относятся также команды обмена байтами. Символические описания данных команд следующие: ; . 1.1.2. Команды ввода-вывода Таких команд всего две. Их мнемонические коды и символическое описание имеют следующий вид: ; , где: N – номер порта, а (N) – число, хранящееся в регистре порта. Особенности данных команд и соответствующие возможности микропроцессора К580ВМ80А таковы, что по одной команде может быть введено или выведено только одно слово. Следовательно, при вводе или выводе группы слов, например, при обмене данными с магнитными дисками, соответствующая команда ввода или вывода должна быть повторена столько раз, сколько слов (байт) содержит группа. Более того, перед каждым повторением операции ввода или вывода необходимо обеспечить, чтобы соответствующим образом изменить содержимое регистра-аккумулятора А. При вводе группы слов передачи содержимого регистра А в память будут выполняться несколько раз подряд. Следовательно, необходимо обеспечить также и формирование адресов ячеек памяти. Например, некоторый начальный адрес нужно всякий раз увеличивать на единицу. Иными словами, при операциях ввода-вывода группы слов ввод или вывод отдельного байта потребует выполнения не одной, а нескольких команд.
1.1.3. Команды арифметических и логических операций Данная группа команд делится на четыре подгруппы. К первой подгруппе относятся арифметические и логические операции с одним операндом. Первые три из них имеют следующие символические описания: ; ; . По первой команде логическое значение признака переноса С заменяется на противоположное. Следует отметить, что в символическом описании этой команды допущена неоднозначность. Буквой С в одних случаях обозначается один из РОН, а в других – признак переноса. По второй команде логическое значение признака переноса устанавливается равным 1, по третьей – содержимое регистра-аккумулятора А заменяется на инверсное. Команда десятичной коррекции DAA используется при выполнении арифметических операций сложения и вычитания над десятичными числами [1, 2, 3]. Подгруппу команд с одним операндом завершают четыре команды, символические описания которых имеют вид: (increment register); (decrement register); (increment register pair); (decrement register pair). Данные команды предусматривают увеличение или уменьшение на единицу соответствующего 8- или 16-разрядного числа. При выполнении двух последних команд могут изменяться логические значения всех признаков, кроме признака переноса С. Следующую подгруппу составляют арифметические и логические операции с двумя операндами. Символические описания первых четырех из них следующие: (add register); ; (subtract register); . Арифметическая операция всегда выполняется над двумя числами, одно из которых хранится в регистре-аккумуляторе, а второе – в одном из РОН. Результат во всех случаях засылается в регистр-аккумулятор. При выполнении второй и четвертой команд учитывается значение признака переноса С. Здесь, снова допускается уже отмеченная выше неоднозначность. Символические описания следующих трех команд рассматриваемой подгруппы имеют вид: ; ; . Первая из них – команда, предусматривающая выполнение логического умножения (операция И) над содержимым регистра-аккумулятора A и содержимым одного из РОН. Вторая команда реализует логическое сложение (операция ИЛИ) над теми же операндами. Последняя команда осуществляет суммирование по модулю два (исключающее ИЛИ). Следующие команды рассматриваемой группы аналогичны семи предыдущим командам арифметических и логических операций с тем единственным отличием, что в качестве второго операнда используется второй байт D 8 двухбайтовой команды: ; ; ; ; ; ; . Последние две команды рассматриваемой подгруппы – команды сравнения. Первая из них, имеющая мнемоническое описание , предусматривает сравнение двух чисел, одно из которых хранится в регистре-аккумуляторе, а второе – является байтом D 8 двухбайтовой команды. Если в результате выполнения операции оказывается, что числа равны, то признаку нуля Z присваивается значение 1. Если же число, хранимое в регистре-аккумуляторе, окажется меньше операнда D 8, то признаку переноса С присваивается значение 1. Команда отличается от предыдущей команды тем, что в качестве второго операнда используется содержимое одного из РОН. В отдельную подгруппу выделяется команда , которая осуществляет выполнение операции сложения над двумя 16-разрядными (двухбайтовыми) двоичными числами. Смысл этой команды раскрывается ее символическим описанием. Под YZ понимается содержимое регистровых пар ВС, DE, HL или регистра SP. В отличие от команд предыдущей подгруппы, при выполнении которых могут изменяться логические значения всех признаков, при выполнении данной команды может изменяться лишь значение признака переноса С. Последнюю подгруппу арифметических и логических команд составляют четыре команды сдвига: RAR (rotate accumulator right through carry), RRC (rotate right), RAL (rotate accumulator left through carry) и RLC (rotate accumulator left), предусматривающие выполнение операции сдвига содержимого регистра-аккумулятора. В каждом из четырех случаев логическое значение данного разряда заменяется логическим значением соседнего разряда. При командах RAR и RRC подобная замена производится слева направо, то есть осуществляется сдвиг вправо. При этом признаку переноса С присваивается логическое значение крайнего правого (старшего) разряда регистра-аккумулятора. При выполнении сдвига вправо в общем случае непонятно, каким должно стать логическое значение крайнего левого (младшего) разряда регистра. При выполнении команды RAR крайнему левому разряду регистра присваивается логическое значение признака переноса С, при выполнении команды RRC – то логическое значение, которое до выполнения операции имел крайний правый разряд. Подобная операция известна также под названием циклического сдвига. По командам RAL и RLC выполняются операции сдвига, аналогичные соответственно двум рассмотренным командам, за тем исключением, что сдвиг производится влево. При выполнении операции сдвига значения всех признаков, кроме признака переноса С, остаются неизменными. Следует отметить, что микропроцессор К580ВМ80А выполняет всего две арифметические операции, то есть операции сложения и вычитания. Однако, этого вполне достаточно для выполнения любых вычислений, поскольку, например, операция умножения выполняется как ряд последовательных сложений, операция возведения в степень может быть выполнена как ряд последовательных умножений и так далее. Операции сложения и вычитания могут широко использоваться также при реализации, так называемых, невычислительных алгоритмов. Например, с помощью операции вычитания, как правило, производят простое сравнение двух чисел.
1.1.4. Команды управления Данная группа команд состоит из двух подгрупп. Первую подгруппу составляют команды передачи управления. Мнемонический код и символическое описание первой из группы команд передачи управления имеет вид . Предполагая, что до некоторого момента команды выполняются в своей естественной последовательности, содержимое счетчика адресов команд каждый раз увеличивается на единицу. По команде PCHL естественная последовательность нарушается, и в счетчик адресов команд PC передается содержимое регистровой пары HL, служащее теперь адресом ячейки памяти, из которой будет извлечена новая подлежащая исполнению команда. Рассмотренная операция является примером безусловного перехода по программе. Вторая аналогичная команда имеет вид и тоже предусматривает операцию безусловного перехода по программе. Единственное отличие от предыдущей команды состоит в том, что в счетчик адресов команд передается содержимое двух байт трехбайтовой команды – новый адрес, обозначенный как ADR. После выполнения такой операции следующей выполняемой командой будет команда, код операции которой хранится в ячейке памяти с адресом ADR. В рассматриваемую группу команд также входят восемь команд условного перехода. В состав АЛУ микропроцессора К580ВМ80А входит 8-разрядный регистр признаков F, каждый разряд которого имеет определенное назначение. В нулевом (младшем) разряде этого регистра записывается признак переноса С (carry), которому присваивается логическое значение 1 в том случае, когда потребность в операции переноса возникает при сложении (вычитании) старших разрядов двух 8-разрядных двоичных чисел. Поскольку за одним исключением, которое будет рассмотрено дальше, операции сложения и вычитания выполняются только над 8-разрядными двоичными числами, то сигнал переноса в следующий разряд записывается в регистр признаков и либо учитывается при выполнения следующей операции, либо служит сигналом, привлекающим внимание программиста к возникшей ситуации. В первом разряде регистра признаков постоянно хранится единица. Во втором разряде хранится признак четности, обозначенный буквой Р (parity). Этот признак принимает значение 1, если число единиц в двоичном слове, хранящемся в регистре-аккумуляторе А, четное, иначе он имеет значение 0. В третьем и пятом разрядах регистра признаков постоянно хранятся нули. В четвертом разряде записывается признак АС (auxiliary carry), представляющий собой признак вспомогательного переноса. Этот признак принимает значение 1 в том случае, когда перенос возникает при выполнении сложения (вычитания) над четвертыми разрядами двоичных чисел. Признак Z (zero), хранящийся в шестом разряде регистра признаков, принимает значение 1, когда в результате выполнения команды содержимое регистра-аккумулятора А равно нулю. Наконец, признак знака S (sign), находящийся в седьмом разряде, принимает значение 1, если в результате выполнения команды содержимое регистра-аккумулятора является отрицательным числом. Результат выполнения любой команды всегда состоит из двух частей: двоичного слова, поступившего в регистр-аккумулятор А, и двоичного слова, находящегося в регистре признаков F. Эти два слова, взятые вместе, получили название слово состояния программы. Действительно, содержимое регистров А и F достаточно подробно характеризует то состояние, к которому привела последовательность операций на текущий момент времени. По-английски слово состояния программы это – programme state word. Первые буквы этих трех слов дают сокращение PSW, которое используется при символических описаниях команд. Все восемь команд условного перехода могут быть описаны одним мнемоническим кодом и одним символическим описанием , где CON – имя условия. Коды команд условного перехода имеют вид , где биты – это коды условий. При написании реальных команд на место CON подставляется одно из следующих восьми условий: NZ (no zero) – ненулевой результат, признак , биты ; Z (zero) –нулевой результат, признак , биты ; NC (no carry) – отсутствие переноса, признак , биты ; C (carry) – перенос, признак , биты ; PO (party omen) – нечетное число единиц результата, признак , биты ; PE (party even) –четное число единиц результата, признак , биты ; P (plus) – число неотрицательное, признак , биты ; M (minus) – число отрицательное, признак , биты . В качестве примера рассмотрим порядок выполнения команды . Если результат, хранящийся в регистре-аккумуляторе, действительно ненулевой, признак Z равен нулю, естественная последовательность выполнения команд нарушается и следующей будет исполняться команда, код операции которой хранится в ячейке памяти с адресом ADR. Если признак Z имеет значение 1 последовательность выполнения команд не нарушается, и выполняется следующая по порядку команда. Отметим, что команда имеет трехбайтный формат, поэтому, если код операции команды хранится в ячейке памяти с k -тым адресом, то код операции следующей по порядку команды должен храниться в ячейке памяти с адресом . Следовательно, при выполнении команды , если условие не удовлетворяется, микропроцессор автоматически увеличивает содержимое счетчика адресов команд на три. Приведенное описание иллюстрирует роль регистра признаков. Все выше сказанное справедливо и для остальных семи разновидностей команды условного перехода. Специальная подгруппа группы команд управления предназначена для работы с подпрограммами. Первая команда имеет вид . Действие команды заключается в том, что код адреса ADR записывается в счетчик адресов команд PC. Под адресом ADR в данном случае подразумевается адрес первой команды подпрограммы. В отличие от команд безусловного и условного переходов основному действию команды предшествует подготовка, обеспечивающая возможность возврата из подпрограммы и продолжение выполнения программы. Предыдущее содержимое счетчика адресов команд передается в ячейки памяти с адресами и . Любая подпрограмма обязательно заканчивается командой безусловного возврата, описание которой следующее . После выполнения подпрограммы в счетчик адресов команд передается содержимое тех ячеек памяти, куда перед началом выполнения подпрограммы было помещено содержимое счетчика адресов команд. Благодаря этому основная программа, прерванная обращением к подпрограмме, может продолжиться с того самого места, на котором она была прервана. Кроме того, при выполнении команды возврата содержимое указателя стека увеличивается на два, то есть восстанавливается его исходное значение. При выполнении команды в стек записывается лишь содержимое счетчика адресов команд, но не слово состояния программы PSW. К моменту начала выполнения подпрограммы в регистре-аккумуляторе A и регистре признаков F в общем случае находятся какие-то слова. Поскольку подпрограмма должна выполняться над какими-то операндами, то первым из них оказывается как раз слово, хранящееся в регистре-аккумуляторе. Происходит как бы автоматическая передача информации из программы в подпрограмму. Выполнение команд подпрограммы изменяет содержимое регистров A и F и регистра признаков. Слово состояния программы PSW не сохраняется в стеке при выполнении команды обращения к подпрограмме. Если такое сохранение по тем или иным соображениям необходимо, то перед командой обращения к подпрограмме надо выполнить команду . Кроме команд безусловного обращения к подпрограмме и безусловного возврата существуют их условные разновидности, символические описания которых следующие: ; . Из представленных описаний ясно, что по своему действию обе эти команды эквивалентны рассмотренной команде обращения к подпрограмме. Различие состоит в том, что они выполняются при удовлетворении одного из восьми рассмотренных ранее условий. Наименование условия записывается на место имени CON точно так же, как это делалось для команд условного перехода. Последняя разновидность команд обращения к подпрограммам имеет вид . Здесь адрес ADR зависит от значения числа X. Эта зависимость показана в табл.3. Иными словами, команда предусматривает обращение к подпрограмме, первая команда которой хранится не в любой, а в одной из восьми фиксированных ячеек памяти.
1.1.5. Специальные команды Эта группа состоит всего из четырех команд: EI – разрешение прерывания (enable interrupt), DI – запрещение прерывания (disable interrupt), HLT – останов (halt) и NОР – холостая операция (no operation). Первые две команды служат для реализации механизма маскирования прерываний. Каждая программа должна заканчиваться командой останова HLT, по которой прекращается выполнение каких бы то ни было операций, но сохраняется содержимое всех регистров. По команде NOP операции не выполняются, но содержимое счетчиков адресов команд увеличивается на единицу и в следующем цикле выполняется следующая по порядку команда.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.021 сек.) |