Команды арифметической обработки. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Команды арифметической обработки.



Группа содержит команды сложения (ADD, ADC, ADI, ACI, DAD), вычитания (SUB, SBB, SUI, SBI), увеличения на 1 (INR, INX), уменьшения на 1 (DCR, DCX) и десятичной коррекции DAA.

Предусмотрены операции как над байтами (ADD, ADC, ACI, SUB, SBB, SUI, SBI, INR, DCR, DAA), так и над словами (DAD, INX, DCX).

Во всех байтовых операциях используется аккумулятор, как источник и приемник результата, а источником второго операнда служит или регистр или ячейка памяти М или data 8. В некоторых операциях (ADC, ACI, SBB, SBI) учитывается состояние флага CY.

В команде сложения DAD роль аккумулятора выполняет 16-разрядный регистр Н, содержимое которого складывается с содержимым 16-разрядных регисторов B, D, H, SP.

Операции увеличения и уменьшения на 1,используемые для организации счетчиков, применяются как к 8, так и к 16-разрядным регистрам, включая SP, а также модификацию содержимого ячейки памяти М.

Команда десятичной коррекции DAA поддерживает операцию сложения в упакованном BCD коде. Она используется для корректировки результата после сложения двух операндов в BCD коде. Например:

ADD B;A--------ABCD+BBCD,

DAA;ABCD----Коррекция А.

 

Команды передачи управления.

Группа содержит три основные операции, организующие безусловный переход и типичные для большинства МС: переход (JMP), вызов подпрограммы (CALL), возврат из подпрограммы (RET).

Для организации условного перехода каждая базовая операция имеет модифицированные варианты: условный переход (JCC),условный вызов подпрограммы (CCC),условный возврат из подпрограммы (RCC).

Каждая условная операция обеспечивает проверку восьми условий, в соответствии с которыми меняется значение поля CC. Передача управления производится только при выполнении условия, указанного в команде. Состав условий позволяет контролировать состояние флагов CY, Z, М, Р. Мнемоника поля и условие перехода приведены ниже:

C Carry CY=1

NC Not Carry CY=0

Z Zero Z=0

NZ Not Zero Z=1

M Minus M=1

P Positive M=0

PE Parity Even P=1

PO Parity Odd P=0.

В операциях перехода и вызова подпрограмм используется прямой 16-разрядный адрес, обеспечивающий передачу управления в любую точку 64К-байтового пространства памяти.

Пример: JNZ 2030. Если Z=1, то 2030----(PC).

Команда передачи управления по содержимому пары HL (PCHL;PC --- HL)обеспечивает передачу управления по вычисляемому адресу.

 

Команды управления и дополнительные команды.

Две команды ВВ с прямой адресацией портов: команда ввода IN port и вывода OUT port.

Группа содержит ряд команд поддержки системы прерываний: две команды, управляющие общим флагом прерываний EI и DI, а также команда установки маски прерываний и команда чтения маски прерываний. Эти команды подробнее рассмотрены ниже при рассмотрении системы ввода-вывода МП. Предусмотрена специальная однобайтовая команда RST n (n=0-7), представляющая собой укороченный вариант команды CALL address при address = 8*n. Рис. 6.4.

Команда HLT используется для останова работы МП. В состоянии останова МП реагирует на прерывания при сброшенной маске и может быть выведен из состояния останова или по сигналу прерывания или перезапуском.

Команда NOP –пустая операция, по которой никаких действий МП не производит. Она используется для организации коротких пауз и установки программных «заплат».

 

Рис. 6.4. Команды вызова и возврата из подпрограмм8085.

 

Язык Ассемблер

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

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

Существует четыре основных типа директив:

· директивы данных;

· директивы листинга;

· управляющие директивы;

· макро-директивы.

Директивы данных управляют распределением памяти и обеспечивают доступ к символическим обозначениям данных.

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

Директивы управления позволяют произвести секционирование обычного ассемблерного кода.

Макро-директивы управляют исполнением и распределением данных в пределах определений макротела.

Рассмотрим три директивы: ORG, EQU, END.

Директива ORG 100H задает ассемблеру адрес ячейки памяти (100Н), в которой должна быть расположена следующая за ней команда прикладной программы.

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

Например, запись

TMRO EQU 01h

приводит к тому, что в процессе ассемблирования всюду, где встретится символическое имя TMRO, оно будет заменено числом 1.

Директива END дает ассемблеру указание об окончании трансляции.

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

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

Программа на языке АССЕМБЛЕР представляется в виде последовательности предложений – строк. Каждое предложение имеет четыре фиксированных поля: поле метки, поле кода, поле операнда и поле комментария.

Поле МЕТКА позволяет обращаться к адресам по имени, а не по абсолютному адресу. Действительные адреса формируются только на заключительной стадии ассемблирования.

Поля КОП и ОПЕРАНД содержат мнемоники команд МП. В поле операнда допускается использование выражений над введенными выше данными.

Поле КОММЕНТАРИЙ начинается символом (;). Оно используется для пояснений выполняемых действий и игнорируется при трансляции.

В качестве примера изучим программу умножения двух 8-и разрядных чисел без знака для МП 8085.

Рассмотрим сначала ручное умножение двух 4-х разрядных двоичных чисел.

 

1 0 1 1 Множимое

1 0 0 1 Множитель

1 0 1 1

0 0 0 0

0 0 0 0

1 0 1 1

_______ ____

1 1 0 0 0 1 1 Произведение

 

Рис. 6.5. Умножение двух 4-х разрядных двоичных чисел

 

Пусть множимое хранится в регистре E регистровой пары DE, и регистр D предварительно установлен в 0. Множитель будет храниться в регистре A. В регистровой паре HL будем формировать 16-и разрядное произведение. В регистре В организуем вычитающий счетчик числа повторений цикла (счетчик на 8). При достижении нулевого значения счетчика умножение чисел будет закончено и произойдет выход из цикла. Схема алгоритма умножения двух 4-х разрядных двоичных чиселпредставлена ниже.

Рис. 6.6. Алгоритм умножения двух 4-х разрядных двоичных чисел

Программаумножения двух 4-х разрядных двоичных чиселна языке Ассемблер 8085 представлена в табл. 1.

 

Таблица. 1

 

Метка Код Операнд Комментарий
  LXI H, 0 ; Обнуление HL 0----HL
  MVI B, 8 ; Подготовка счетчика, 8----В
LOOP2: DAD H ;Сдвиг влево HL HL+HL---HL
  RAL   ;Сдвиг влево А, следующий разряд.
  JNC LOOP1 ; Условный переход по переносу
LOOP1: DAD D ; Суммирование, если была 1
  DCR B ; Вычитание счетчика циклов
  JNZ LOOP2 ; Повтор цикла, если В<>0

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 246; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.0.53 (0.016 с.)