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

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

Система команд процессора

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

В общем случае система команд процессора включает в себя следующие четыре основные группы команд:

  • команды пересылки данных;
  • арифметические команды ;
  • логические команды ;
  • команды переходов.

Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника (Source) в приемник (Destination). Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода/вывода. АЛУ в данном случае не используется.

Арифметические команды выполняют операции сложения, вычитания, умножения, деления, увеличения на единицу (инкрементирования), уменьшения на единицу (декрементирования) и т.д. Этим командам требуется один или два входных операнда. Формируют команды один выходной операнд.

Логические команды производят над операндами логические операции, например, логическое И, логическое ИЛИ, исключающее ИЛИ, очистку, инверсию, разнообразные сдвиги (вправо, влево, арифметический сдвиг, циклический сдвиг). Этим командам, как и арифметическим, требуется один или два входных операнда, и формируют они один выходной операнд.

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

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

Переходы могут быть условными и безусловными. Именно эти команды позволяют строить сложные алгоритмы обработки информации.

В соответствии с результатом каждой выполненной команды устанавливаются или очищаются биты регистра состояния процессора ( PSW ). Но надо помнить, что не все команды изменяют все имеющиеся в PSW флаги. Это определяется особенностями каждого конкретного процессора.

У разных процессоров системы команд существенно различаются, но в основе своей они очень похожи. Количество команд у процессоров также различно. Например, у упоминавшегося уже процессора МС68000 всего 61 команда, а у процессора 8086 — 133 команды.

У современных мощных процессоров количество команд достигает нескольких сотен.

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

Рассмотрим теперь особенности четырех выделенных групп команд процессора более подробно.

Команды пересылки данных занимают очень важное место в системе команд любого процессора. Они выполняют следующие важнейшие функции:

  • загрузка (запись) содержимого во внутренние регистры процессора;
  • сохранение в памяти содержимого внутренних регистров процессора;
  • копирование содержимого из одной области памяти в другую;
  • запись в устройства ввода/вывода и чтение из устройств ввода/вывода.

В некоторых процессорах (например, Т-11) все эти функции выполняются одной единственной командой MOV (для байтовых пересылок — MOVB ) но с различными методами адресации операндов.

В других процессорах помимо команды MOV имеется еще несколько команд для выполнения перечисленных функций. Например, для загрузки регистров могут использоваться команды загрузки, причем для разных регистров — разные команды (их обозначения обычно строятся с использованием слова LOAD — загрузка).

Часто выделяются специальные команды для сохранения в стеке и для извлечения из стека ( PUSH — сохранить в стеке, POP — извлечь из стека). Эти команды выполняют пересылку с автоинкрементной и с автодекрементной адресацией (даже если эти режимы адресации не предусмотрены в процессоре в явном виде).

Иногда в систему команд вводится специальная команда MOVS для строчной (или цепочечной) пересылки данных (например, в процессоре 8086).

Эта команда пересылает не одно слово или байт, а заданное количество слов или байтов ( MOVSB ), то есть инициирует не один цикл обмена по магистрали, а несколько.

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

В некоторых процессорах (например, в процессоре 8086) специально выделяются функции обмена с устройствами ввода/вывода.

Команда IN используется для ввода (чтения) информации из устройства ввода/вывода, а команда OUT используется для вывода (записи) в устройство ввода/вывода. Обмен информацией в этом случае производится между регистром-аккумулятором и устройством ввода/вывода.

В более продвинутых процессорах этого же семейства (начиная с процессора 80286) добавлены команды строчного (цепочечного) ввода (команда INS ) и строчного вывода (команда OUTS ).

Эти команды позволяют пересылать целый массив (строку) данных из памяти в устройство ввода/вывода ( OUTS ) или из устройства ввода/вывода в память ( INS ). Адрес памяти после каждого обращения увеличивается или уменьшается (как и в случае с командой MOVS ).

Также к командам пересылки данных относятся команды обмена информацией (их обозначение строится на основе слова Exchange ). Может быть предусмотрен обмен информацией между внутренними регистрами, между двумя половинами одного регистра ( SWAP ) или между регистром и ячейкой памяти.

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

  • команды операций с фиксированной запятой (сложение, вычитание, умножение, деление);
  • команды операций с плавающей запятой (сложение, вычитание, умножение, деление);
  • команды очистки;
  • команды инкремента и декремента;
  • команда сравнения.

Команды операций с фиксированной запятой работают с кодами в регистрах процессора или в памяти как с обычными двоичными кодами. Команда сложения ( ADD ) вычисляет сумму двух кодов. Команда вычитания ( SUB ) вычисляет разность двух кодов.

Команда умножения ( MUL ) вычисляет произведение двух кодов (разрядность результата вдвое больше разрядности сомножителей). Команда деления ( DIV ) вычисляет частное от деления одного кода на другой.

Причем все эти команды могут работать как с числами со знаком, так и с числами без знака.

Команды операций с плавающей запятой (точкой) используют формат представления чисел с порядком и мантиссой (обычно эти числа занимают две последовательные ячейки памяти).

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

Команды очистки ( CLR ) предназначены для записи нулевого кода в регистр или ячейку памяти. Эти команды могут быть заменены командами пересылки нулевого кода, но специальные команды очистки обычно выполняются быстрее, чем команды пересылки. Команды очистки иногда относят к группе логических команд, но суть их от этого не меняется.

Команды инкремента (увеличения на единицу, INC ) и декремента (уменьшения на единицу, DEC ) также бывают очень удобны. Их можно в принципе заменить командами суммирования с единицей или вычитания единицы, но инкремент и декремент выполняются быстрее, чем суммирование и вычитание. Эти команды требуют одного входного операнда, который одновременно является и выходным операндом.

Наконец, команда сравнения (обозначается CMP ) предназначена для сравнения двух входных операндов. По сути, она вычисляет разность этих двух операндов, но выходного операнда не формирует, а всего лишь изменяет биты в регистре состояния процессора ( PSW ) по результату этого вычитания.

Следующая за командой сравнения команда (обычно это команда перехода ) будет анализировать биты в регистре состояния процессора и выполнять действия в зависимости от их значений (о командах перехода речь идет в разделе 3.3.4).

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

Источник: http://www.intuit.ru/studies/courses/3/3/lecture/70

Команды передачи данных ассемблер. Арифметические и логические команды. Команды стека, ввода-вывода и управления, страница 2

2. Арифметические команды

Синтаксис Код Комментарий
ADD A 87 Сложить А с А.
ADD B 80 Сложить B с A.
ADD C 81 Сложить C с A.
ADD D 82 Сложить D с A.
ADD E 83 Сложить E с A.
ADD H 84 Сложить H с A.
ADD L 85 Сложить L с A.
ADD M 86 Сложить содержимое ячейки памяти, адрес которой находится в паре HL, с А.
ADI N C6 Сложить непосредственно следующие данные N с A.
ADC A 8F Сложить А с А с переносом.
ADC B 88 Сложить B с А с переносом.
ADC C 89 Сложить C с А с переносом.
ADC D 8A Сложить D с А с переносом.
ADC E 8B Сложить E с А с переносом.
ADC H 8C Сложить H с А с переносом.
ADC L 8D Сложить L с А с переносом.
ADC M 8E Сложить содержимое ячейки памяти, адрес которой содержится в паре HL, с А с переносом.
ACI N CE Сложить непосредственно следующие данные N с А с переносом.
SUB A 97 Вычесть А из А (очистить А).
SUB B 90 Вычесть B из А.
SUB C 91 Вычесть C из А.
SUB D 92 Вычесть D из А.
SUB E 93 Вычесть E из А.
SUB H 94 Вычесть H из А.
SUB L 95 Вычесть L из А.
SUB M 96 Вычесть содержимое ячейки памяти, адрес которой находится в паре HL, из А.
SUI N D6 Вычесть непосредственно следующие данные N из А.
SBB A 9F Вычесть А из А (очистить А).
SBB B 98 Вычесть с заёмом B из А
SBB C 99 Вычесть с заёмом C из А.
SBB D 9A Вычесть с заёмом D из А.
SBB E 9B Вычесть с заёмом E из А.
SBB H 9C Вычесть с заёмом H из А.
SBB L 9D Вычесть с заёмом L из А.
SBB M 9E Вычесть с заёмом содержимое яч-ки памяти, адрес которой находится в паре HL, из А.
SBI N DE Вычесть с заёмом непосредственно данные N из А.
DAD B 09 Содержимое BC сложить с содержимым HL.
DAD D 12 Содержимое DE сложить с содержимым HL.
DAD H 29 Содержимое HL сложить с содержимым HL.
DAD SP 39 Содержимое SP сложить с содержимым HL.
INR A 3C Увеличить значение в регистре А, на единицу.
INR B 04 Увеличить значение в регистре B, на единицу.
INR C 0C Увеличить значение в регистре C, на единицу.
INR D 14 Увеличить значение в регистре D, на единицу.
INR E 1C Увеличить значение в регистре E, на единицу.
INR H 24 Увеличить значение в регистре H, на единицу.
INR L 2C Увеличить значение в регистре L, на единицу.
INR M 34 Увеличить содержимое яч-ки памяти, адрес которой находится в паре HL, на единицу.
INX B 03 Увеличить значение в паре регистров BC, на единицу.
INX D 13 Увеличить значение в паре регистров DE, на единицу.
INX H 23 Увеличить значение в паре регистров HL, на единицу.
INX SP 33 Увеличить значение в паре регистров SP, на единицу.
DCR A 3D Уменьшить значении в регистре А, на единицу.
DCR B 05 Уменьшить значение в регистре B, на единицу.
DCR C 0D Уменьшить значение в регистре C, на единицу.
DCR D 15 Уменьшить значение в регистре D, на единицу.
DCR E 1D Уменьшить значение в регистре E, на единицу.
DCR H 25 Уменьшить значение в регистре H, на единицу.
DCR L 2D Уменьшить значение в регистре L, на единицу.
DCR M 35 Уменьшить содержимое яч-ки памяти, адрес которой находится в паре HL, на единицу.
DCX B 0B Уменьшить значение в паре регистров BC, на единицу.
DCX D 1B Уменьшить значение в паре регистров DE, на единицу.
DCX H 2B Уменьшить значение в паре регистров HL, на единицу.
DCX SP 3B Уменьшить значение в паре регистров SP, на единицу.
DAA 27 Десятичная коррекция регистра А

Читайте также:  Нормы освещения

Полный список ВУЗов

Уважаемый посетитель!

Чтобы распечатать файл, скачайте его (в формате Word).

Ссылка на скачивание – внизу страницы.

Источник: https://vunivere.ru/work29308/page2

Группа команд арифметических и логических операций

Источник: https://megapredmet.ru/1-71349.html

Команды логических операций: AND, OR, XOR, TEST, NOT

Источник: https://infopedia.su/10x29ac.html

Команды арифметических, логических и сдвиговых операций

Данная группа включает в себя команды, непосредственное выполнение которых обеспечивает арифметическо-логическое устройство (АЛУ) процессора 8080. Поэтому способ выполнения и возможности этих команд целиком определяются архитектурными особенностями АЛУ.

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

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

К арифметическим командам относятся также команды сравнения, поскольку сравнение производится путём вычитания и установки признаков Z и CY, способных отразить равенство сравниваемых чисел или указать на большее из них.

Логические команды предоставляют возможности непосредственно выполнить следующие операции с однобайтными числами: “И” (конъюнкция), “ИЛИ” (дизъюнкция), “исключающее ИЛИ” (сложение по модулю два), “НЕ” (инверсия).

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

К этой же группе относится специальная арифметическая команда, обеспечивающая десятичную коррекцию, а также команды управление битом переноса CY.

Схема выполнения практически всех арифметических и логических операций может быть представлена следующим образом:

(A) (A)

где – символ операции: “+”, “–”, “&” и т.д. Второй операнд может храниться в регистре процессора, в ячейке памяти или быть в составе самой команды. Первый операнд (или единственный операнд для операций с одним операндом) всегда хранится в аккумуляторе. Результат операции отправляется командой в аккумулятор, а признаки этого результата устанавливаются в регистре признаков.

Команды сложения

Команды сложения позволяют выполнять операции сложения однобайтных или двухбайтных операндов.

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

Команды сложения двухбайтных операндов работают с операндами только в регистровых парах: первое слагаемое и результат все такие команды хранят в регистровой HL (регистровая пара HL выступает в роли аккумулятора для однобайтных операций), второе слагаемое можно определять в любой из регистровых трёх пар процессора. Двоичное сложение выполняется в соответствии с правилами двоичной арифметики, представленными в Табл.9.1.

Таблица 1.8

Правила двоичного сложения



Обратная связь

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение

Как определить диапазон голоса – ваш вокал

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

Целительная привычка

Как самому избавиться от обидчивости

Противоречивые взгляды на качества, присущие мужчинам

Тренинг уверенности в себе

Вкуснейший “Салат из свеклы с чесноком”

Натюрморт и его изобразительные возможности

Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.

Как научиться брать на себя ответственность

Зачем нужны границы в отношениях с детьми?

Световозвращающие элементы на детской одежде

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

Как слышать голос Бога

Классификация ожирения по ИМТ (ВОЗ)

Глава 3. Завет мужчины с женщиной

Оси и плоскости тела человека – Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.

Отёска стен и прирубка косяков – Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.

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

При выполнении большинства арифметических и логических команд аккумулятор является источником одного из операндов и приемником результата. Вторым операндом может быть регистр Ri или ячейка внутренней памяти IRAM.

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

Команда Флаг Команда Флаг
C OV AC C OV AC
ADD + + + ANL C, bit +
ADDC + + + ANL C, /bit +
SUBB + + + ORL C, bit +
MUL + ORL C, /bit +
DIV + MOV C, bit +
DA + CLR C
RRC + CPL C +
RLC + CJNE +
SETB C POP PSW + + +

Выполнение операций сложения и вычитания чисел со знаком, как и одноименных операций с беззнаковыми числами, также выполняется в АЛУ.

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

Установленный флаг OV указывает на ошибочный результат (отрицательное значение при выполнении вычитания отрицательного числа из положительного или положительного значения при вычитании положительного числа из отрицательного).

Операции умножения и деления реализуются встроенным аппаратным блоком умножения/деления CPU с использованием аккумулятора A и регистра B.

В команде умножения MUL AB содержимое ACC умножается на содержимое регистра B и 16-битный результат размещается в регистре B (старший байт) и в аккумуляторе (младший байт).

При выполнении команды деления DIV AB реализуется деление 8-битового беззнакового числа в аккумуляторе на 8-битовое беззнаковое число в регистре B. Результат операции заносится в аккумулятор (целая часть частного) и в регистр B (остаток).

Мнемокод КОП Б Ц Функции
ADD A, Rn 1rrr (A) := (A) + (Rn)
ADD A, direct (A) := (A) + (direct)
ADD A, @Ri 011i (A) := (A) + ((Ri))
ADD A, #data (A) := (A) + #data
ADDC A, Rn 1rrr (A) := (A) + (C) + (Rn)
ADDC A, direct (A) := (A) + (C) + (direct)
ADDC A, @Ri 011i (A) := (A) + (C) + ((Ri))
ADDC A, #data (A) := (A) + (C) + #data
SUBB A, Rn 1rrr (A) := (A) – (C) – (Rn)
SUBB A, direct (A) := (A) – (C) – (direct)
SUBB A, @Ri 011i (A) := (A) – (C) – ((Ri))
SUBB A, #data (A) := (A) – (C) – #data
DA A Десятичная коррекция содержимого аккумулятора
INC A (A) := (A) + 1
INC Rn 1rrr (Rn) := (Rn) + 1
INC direct (direct) := (direct) + 1
INC @Ri 011i ((Ri)) := ((Ri)) + 1
INC DPTR (DPTR) := (DPTR) + 1
DEC A (A) := (A) – 1
DEC Rn 1rrr (Rn) := (Rn) – 1
DEC direct (direct) := (direct) – 1
DEC @Ri 011i ((Ri)) := ((Ri)) – 1
MUL AB (B)15-8, (A)7-0 := (A)*(B)
DIV AB (A)цел, (B)ост := (A)*(B)
ANL A, Rn 1rrr (A) := (A) & (Rn)
ANL A, direct (A) := (A) & (direct)
ANL A, #data (A) := (A) & #data
ANL A, @Ri 011i (A) := (A) & ((Ri))
ANL direct, A (direct) := (direct) & (A)
ANL direct, #data (direct) := (direct) & #data
ORL A, Rn 1rrr (A) := (A) V (Rn)
ORL A, direct (A) := (A) V (direct)
ORL A, @Ri 011i (A) := (A) V ((Ri))
ORL A, #data (A) := (A) V #data
ORL direct, A (direct) := (direct) V (A)
ORL direct, #data (direct) := (direct) V #data
XRL A, Rn 1rrr (A) := (A) XOR (Rn)
XRL A, direct (A) := (A) XOR (direct)
XRL A, @Ri 011i (A) := (A) XOR ((Ri))
XRL A, #data (A) := (A) XOR #data
XRL direct, A (direct) := (direct) XOR (A)
XRL direct, #data (direct) := (direct) XOR #data
CLR A Обнуление аккумулятора (A) := 0
CPL A Инверсия аккумулятора
RL A Сдвиг аккумулятора влево циклический
RLC A Сдвиг аккумулятора влево через перенос
RR A Сдвиг аккумулятора вправо циклический
RRC A Сдвиг аккумулятора вправо через перенос
SWAP A Циклический сдвиг ACC на 4 разряда (A3-0) « (A7-4)

Команды битового процессора

Битовый процессор является частью архитектуры МК, и его можно рассматривать как независимый процессор побитовой обработки. Битовый процессор выполняет свой набор команд, имеет побитовоадресуемое ОЗУ и свой ввод-вывод.

Команды, оперирующие с битами, обеспечивают прямую адресацию 128 бит в шестнадцати ячейках IRAM (ячейки с адресами 20h  2Fh) и прямую адресацию бит регистров SFR с адресами, кратными 8.

Каждый из отдельно адресуемых битов может быть установлен в 1, сброшен в 0, инвертирован и проверен. Между любым прямоадресуемым битом и флагом переноса С может быть произведены логические операции И, ИЛИ с запоминанием результата во флаге С. Любой бит может быть перезаписан в/из флага С.

Команда условной передачи управления битового процессора реализуют переходы, если проверяемый бит установлен (со сбросом или без сброса этого бита) или если проверяемый бит не установлен.

Мнемокод КОП Б Ц Функции
MOV C, bit (C) := bit
MOV bit, C (bit) := (C)
CLR C (C) := 0
CLR bit (bit) := 0
SETB C (C) := 1
SETB bit (bit) := 1
CPL C
CPL bit
ANL C, bit
ANL C, /bit
ORL C, bit
ORL C, /bit
JB bit, rel Переход, если бит установлен (PC) := (PC) + 3 if (bit) = 1 then (PC) := (PC) + rel
JBC bit, rel Переход, если бит установлен, и сброс этого бита(PC) := (PC) + 3 if (bit) = 1 then (bit) := 0, (PC) := (PC) + rel
JNB bit, rel Переход, если бит не установлен(PC) := (PC) + 3 if (bit) = 0 then (PC) := (PC) + rel
JC rel Переход, если перенос установлен(PC) := (PC) + 2if (C) = 1 then (PC) := (PC) + rel
JNC rel Переход, если перенос не установлен (PC) := (PC) + 2 if (C) = 0 then (PC) := (PC) + rel

Логические операции являются важным элементом в проектировании

микросхем и имеют много общего в логике программирования. Команды AND, OR,

XOR и TEST – являются командами логических операций. Эти команды

используются для сброса и установки бит и для арифметических операций в

коде ASCII (см.гл.13). Все эти команды обрабатывают один байт или одно

слово в регистре или в памяти, и устанавливают флаги CF, OF, PF, SF, ZF.

AND: Если оба из сравниваемых битов равны 1, то результат равен 1; во

всех остальных случаях результат – 0.

OR: Если хотя бы один из сравниваемых битов равен 1, то результат

равен 1; если сравниваемые биты равны 0, то результат – 0.

XOR: Если один из сравниваемых битов равен 0, а другой равен 1, то

результат равен 1; если сравниваемые биты одинаковы (оба – 0 или оба – 1)

то результат – 0.

TEST: действует как AND-устанавливает флаги, но не изменяет биты.

Первый операнд в логических командах указывает на один байт или слово

в регистре или в памяти и является единственным значением, которое может

изменятся после выполнения команд. Еще одна логическая команда NOT устанавливает обpатное значение бит в

байте или в слове, в регистре или в памяти: нули становятся единицами, а

единицы – нулями. Если, например, pегистр AL содержит 1100 0101, то

команда NOT AL изменяет это значение на 0011 1010. Флаги не меняются.

Команда NOT не эквивалентна команде NEG, которая меняет значение с

положительного на отрицательное и наоборот, посредством замены бит на

противоположное значение и прибавления единицы.

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

Арифметические команды: ADC, ADD, SBB, SUB.

Команда adc осуществляет сложение первого и второго операндов, прибавляя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется.

Читайте также:  Идеальная программа на с для мк — продолжение

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

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

Команда add осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется.

В качестве первого операнда команды add можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго – регистр (кроме сегментного), ячей-ку памяти или непосредственное значение, однако не допускается опре-делять оба операнда одновременно как ячейки памяти.

Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команду add можно использовать для сложения как обычных целых чи-сел, так и двоично-десятичных (с использованием регистра АХ для хра-нения результата).

Команда SBB – вычитание двух операндов

Sub – команда вычитания. Вычитает два числа. Результат заносится в первый регистр.

Команды обработки строк~

Директива MACRO указывает ассемблеру, что следующие команды до

директивы ENDM являются частью макроопределения. Имя макрокоманды – INIT1,

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

Директива ENDM завершает макроопределение. Семь команд между директивами

MACRO и ENDM составляют тело макроопределения.

Имена, на которые имеются ссылки в макроопределении, CSEG, DSEG и

STACK должны быть определены где-нибудь в другом месте программы.

Макрокоманда INIT1 может использоваться в кодовом сегменте там, где

необходимо инициализировать регистры. Когда ассемблер анализирует команду

INIT1, он сначала просматривает таблицу мнемокодов и, не обнаружив там

соответствующего элемента, проверяет макрокоманды. Так как программа

содержит определение макрокоманды INIT1 ассемблер подставляет тело

макроопределения, генерируя необходимые команды – макрорасширение.

Программа использует рассматриваемую макрокоманду только один раз, хотя

имеются другие макрокоманды, предназначенные на любое число применений и

для таких макрокоманд ассемблер генерирует одинаковые макрорасширения.

На рис.20.1 показана ассемблированная программа. В листинге

макрорасширения каждая команда, помеченная слева знаком плюс (+), является

результатом генерации макрокоманды. Кроме того, в макрорасширении

отсутствует директива ASSUME, так как она не генерирует объектный код.

В последующем разделе “Включение из библиотеки макроопределений

показана возможность каталогизации макрокоманд в библиотеке и

автоматическое включение их в любые программы.

Команды прерывания~

Команда INT прерывает обработку программы, передает управление в DOS

или BIOS для определенного действия и затем возвращает управление в

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

используется для выполнения операций ввода или вывода. Для выхода из

программы на обработку прерывания и для последующего возврата команда INT

выполняет следующие действия:

– уменьшает указатель стека на 2 и заносит в вершину стека

содержимое флагового регистра;

– очищает флаги TF и IF;

– уменьшает указатель стека на 2 и заносит содержимое регистра

CS в стек;

– уменьшает указатель стека на 2 и заносит в стек значение

командного указателя;

– обеспечивает выполнение необходимых действий;

– восстанавливает из стека значение регистра и возвращает

управление в прерванную программу на команду, следующую после INT.

Этот процесс выполняется полностью автоматически. Необходимо лишь

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

регистров.

Команда INT 10H включает в себя установку курсора в любую позицию и

очистку экрана. Ниже приведен пример установки курсора на 5-ую строку и

12-ый столбец:

MOV AH,02 ;Запрос на установку курсора

MOV BH,00 ;Экран 0

MOV DH,05 ;Строка 05

MOV DL,12 ;Столбец 12

INT 10H ;Передача управления в BIOS

Значение 02 в регистре AH указывает команде INT 10H на выполнение операции

установки курсора. Значение строки и столбца должны быть в регистре DX, а

номер экрана (или страницы) в регистре BH (обычно 0). Содержимое других

регистров несущественно. Для установки строки и столбца можно также

использовать одну команду MOV c непосредственным шест. значением:

MOV DX,050CH ;Строка 5, столбец 12

ОЧИСТКА ЭКРАНА

________________________________________________________________

Запросы и команды остаются на экране пока не будут смещены в

результате прокручивания (“скроллинга”) или переписаны на этом же месте

другими запросами или командами. Когда программа начинает cвое выполнение,

экран может быть очищен. Очищаемая область экрана может начинаться в любой

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

Начальное значение строки и столбца заносится в регистр DX, значение 07 –

в регистр BH и 0600H в AX. В следующем примере выполняется очистка всего

экрана:

MOV AX,0600H ;AH 06 (прокрутка)

;AL 00 (весь экран)

MOV BH,07 ;Нормальный атрибут (черно/белый)

MOV CX,0000 ;Верхняя левая позиция

MOV DX,184FH ;Нижняя правая позиция

INT 10H ;Передача управления в BIOS

Значение 06 в регистре AH указывает команде INT 10H на выполнение

операции очистки экрана. Эта операция очищает экран пробелами; в следующей

главе скроллинг (прокрутка) будет рассмотрен подробнее. Если вы по ошибке

установили нижнюю правую позицию больше, чем шест. 184F, то очистка

перейдет вновь к началу экрана и вторично заполнит некоторые позиции

пробелами. Для монохромных экранов это не вызывает каких-либо

неприятностей, но для некоторых цветных мониторов могут возникнуть

серьезные ошибки.

ЭКРАННЫЕ И КЛАВИАТУРНЫЕ ОПЕРАЦИИ: БАЗОВАЯ ВЕРСИЯ DOS

________________________________________________________________

Обычно программы должны выдать на экран сообщение о завершении или об

обнаружении ошибки, отобразить запрос для ввода данных или для получения

указания пользователя. Рассмотрим сначала методы, применяемые в базовой

версии DOS, в последующих pазделах будут показаны расширенные методы,

введенные в DOS версии 2.0. Операции из базовой DOS работают во всех

версиях, хотя в руководстве по DOS рекомендуется применять расширенные

возможности для новых разработок. В базовой версии DOS команды вывода на

экран более сложны, но команды ввода с клавиатуры проще в использовании,

благодаря встроенным проверкам.

ВЫВОД НА ЭКРАН: БАЗОВАЯ ВЕРСИЯ DOS

________________________________________________________________

Вывод на экран в базовой версии DOS требует определения текстового

сообщения в области данных, установки в регистре AH значения 09 (вызов

функции DOS) и указания команды DOS INT 21H. В процессе выполнения

операции конец сообщения определяется по oграничителю ($), как это

показано ниже:

NAMPRMP DB ‘Имя покупателя?’,’$’

.

.

MOV AH,09 ;Запрос вывода на экран

LEA DX,NAMPRMP ;Загрузка адреса сообщ.

INT 21H ;Вызов DOS

Знак ограничителя “$” можно кодировать непосредственно после cимвольной

строки (как показано в примере), внутри строки: ‘Имя покупателя?$’, или в

следующем операторе DB ‘$’. Используя данную операцию, нельзя вывести на

экран символ доллара “$”. Кроме того, если знак доллара будет

отсутствовать в конце строки, то на экран будут выводиться все последующие

символы, пока знак “$” не встретиться в памяти.

Команда LEA загружает адрес области NAMPRMP в регистр DX для передачи

в DOS адреса выводимой информации. Адрес поля NAMPRMP, загружаемый в DX по

команде LEA, является oтносительным, поэтому для вычисления абсолютного

адреса данных DOS складывает значения регистров DS и DX (DS:DX).

ПРОГРАММА: ВЫВОД НА ЭКРАН НАБОРА СИМВОЛОВ КОДА ASCII

________________________________________________________________

Большинство из 256 кодов ASCII имеют символьное представление, и

могут быть выведены на экран. Шест. коды 00 и FF не имеют символов и

выводятся на экран в виде пробелов, хотя символ пробела имеет в ASCII

шест. код 20.

На рис.8.1 показана COM-программа, которая выводит на экран полный

набор символов кода ASCII. Программа вызывает три процедуры; B10CLR,

C10SET и D10DISP. Процедура B10CLR очищает экран, а процедура C10SET

устанавливает курсор в положение 00,00. Процедура D10DISP выводит

содержимое поля CTR, которое в начале инициализировано значением 00 и

затем yвеличивается на 1 при каждом выводе на экран, пока не достигнет

шест. значения FF.



0 + 0 = 0
0 + 1 = 1
1 + 1 = 0 + перенос 1 в следующий разряд
1 + 1 + 1 = 1 + перенос 1 в следующий разряд

Сначала рассмотрим команды сложения однобайтных чисел.

Читайте также:  Электроизмерительная лаборатория радиолюбителя

Команды типа ADD r , ADС rобеспечивают выбор второго операнда регистровым методом. Выполняемое командой ADD r действие:

(A) (A) + (r)

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

Пример 1.31

Требуется сложить числа 8Eh и C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8Eh ;поместить в аккумулятор 1-е слагаемое

0802 06 C5 MVI B,C5h ; поместить в регистр B 2-е слагаемое

0804 80 ADD B ; выполнить сложение: (A) (A) + (B)

Операция сложения должна дать такой результат:

1 0 0 0 1 1 0 0 8 C

+ 1 1 1 0 0 1 0 1 + E 5

1 0 1 1 1 0 0 0 1 1 7 1

Процессор, выполнив команду ADD B, сохранит младшие 8 разрядов результата в аккумуляторе, а 9-й старший разряд – в бите CY регистра признаков. Бит CY в этом случае как бы дополняет до 9 количество разрядов хранения результата. Другие команды могут использовать бит CY для новых операций сложения, когда выполняется сложение следующих байтов многобайтных чисел.

Команды типа ADC rобеспечивают сложение двух операндов подобно команде ADD r, но кроме того к результату ещё суммируется бит CY регистра признаков:

(A) (A) + (r) + (CY)

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

Пример 1.32

Запрограммировать сложение двухбайтных чисел 358Eh+24C5h.

Адрес Число Мнемокод Комментарий

0800 01 8E 35 LXI B,358E ; поместить в BC 1-е слагаемое

0803 11 C5 24 LXI D,24C5 ; поместить в DE 2-е слагаемое

0806 79 MOV A,C ; подготовить и

0807 83 ADD E ; выполнить сложение младших байтов без

;учёта переноса

0808 6F MOV L,A ; поместить младший байт результата в L

0809 78 MOV A,B ; подготовить и

080A 8A ADC D ; выполнить сложение старших байтов с

;учётом переноса

080B 67 MOV H,A ; поместить старший байт результата в H

Команды типа ADD M , ADС Mобеспечивают выбор второго операнда косвенно-регистровым методом, когда адрес операнда определяется в регистровой паре HL. Выполняемое командой ADD M действие:

(A) (A) + M(HL)

Выполняемое командой ADC M действие:

(A) (A) + M(HL) + (CY)

Пример 1.33

Выполнить сложение 8Eh+C5h, если 2-е слагаемое C5h находится в ячейке с адресом 0B00h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8E ; поместить в аккумулятор 1-е слагаемое

0802 21 00 0B LXI H,0B00 ; подготовить в HL адрес ячейки M

0804 86 ADD M ; выполнить сложение: (A) (A) + M(HL)

Команды типа ADI d8 , ACI d8обеспечивают выбор второго операнда непосредственным методом, то есть путём указания числа в составе самой команды. Выполняемое командой ADI d8 действие:

(A) (A) + d8

Выполняемое командой ACI d8 действие:

(A) (A) + d8 + (CY)

Пример 1.34

Выполнить сложение 8Eh+C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8E ; поместить в аккумулятор 1-е слагаемое

0802 C6 C5 ADI C5 ; выполнить сложение: (A) (A) + C5h

Ещё один тип команд сложения обеспечивает сложение задаваемого операнда с числом 1, то есть инкремент операнда. Операнд может быть определён одним из двух способов. В команде INR r операнд определён регистровым способом и схема выполнения команды выглядит следующим образом:

(r) (r) + 1

В команде INR M операнд определён косвенно-регистровым способом по адресу в регистровой паре HL и схема выполнения команды выглядит следующим образом:

M(HL) M(HL) + 1

В отличие от большинства других арифметическо-логических команд, воздействующих на все признаки, данные команды инкремента никак не влияют на один из битов признаков – бит CY.

Пример 2.35

Пусть в исходном состоянии было: M(0B00)=8Eh, M(0B01)=C5h. Затем выполнятся следующие команды.

Адрес Число Мнемокод Комментарий

0800 21 00 0B LXI H,0B00 ; подготовить в HL адрес ячейки M

0803 34 INR M ; инкремент содержимого ячейки M(0B00)

0804 2C INR L ; инкремент содержимого регистра ;(L)(L)+1

0805 34 INR M ; инкремент содержимого ячейки M(0B01)

и после выполнения этих команд в памяти данных будет: M(0B00)=8Fh, M(0B01)=C6h.

На основе таких команд удобно организовывать суммирующие счётчики повторений каких-либо циклов операций.

Кроме команд сложения однобайтных операндов есть среди команд сложения команды сложения двухбайтных операндов – DAD B , DAD D , DAD H, DAD SP . Схема их выполнения

(HL) (HL) + (rp),

где rp – регистровая пара BC, DE, HL или регистр SP.

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

Команды двухбайтных операций с участием бита CY вообще отсутствуют, поэтому для суммирования многобайтных чисел (более 3-х байтов) их применять не рекомендуется, а лучше использовать команды однобайтных операций.

Пример 1.36

Адрес Число Мнемокод Комментарий

0800 09 DAD B ; выполнить сложение: (HL)(HL)+(BC)

Существуют также команды сложения двухбайтного операнда регистровой пары с числом 1 то есть инкремент регистровых пар: INX B , INX D , INX H . Схема их выполнения

(rp) (rp) + 1

Отличает их от других арифметическо-логических команд полное отсутствие влияния на биты признаков. Применение этих команд может быть эффективным, например, в случае последовательной работы с ячейками области памяти для организации в регистровой паре указателя ячеек области, когда применяется косвенная адресация к этим ячейкам (пример приведён далее при рассмотрении команд декремента).

Команды вычитания

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

Таблица 1.9

Правила двоичного вычитания

0 – 0 = 0
1 – 0 = 1
1 – 1 = 0
0 – 1 = 1 – заём 1 из следующего разряда

Команды вычитания SUB rи SBB rопределяют второй операнд (вычитаемое) регистровым способом. Команды SUB r выполняется по схеме:

(A) (A) – (r)

Эти команды предполагают, что исходные операнды будут предварительно записаны в аккумулятор (уменьшаемое) и в регистр r (вычитаемое).

Пример 1.37

Требуется вычесть из числа 8Eh число C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8E ; поместить в аккумулятор уменьшаемое

0802 06 C5 MVI B,C5 ; поместить в регистр B вычитаемое

0804 90 SUB B ; выполнить вычитание: (A) (A) – (B)

Операция вычитания должна дать такой результат:

1 0 0 0 1 1 0 0 8 C

– 1 1 1 0 0 1 0 1 – E 5

1 1 0 1 0 0 1 1 1 1 A 7

В результате операции присутствует заём, так как уменьшаемое меньше вычитаемого.

Выполняя команду SUB B, процессор сохранит младшие 8 разрядов результата в аккумуляторе, а наличие заёма отразит состоянием бита CY регистра признаков: CY=1. Для операций вычитания бит CY, таким образом, становится битом заёма.

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

Команда SBB rработает так же как команда SUB r, но кроме того из результата вычитания двух операндов вычитается ещё бит CY.

(A) (A) – (r) – (CY)

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

Пример 1.38

Запрограммировать вычитание двухбайтных чисел 358Eh–24C5h.

Адрес Число Мнемокод Комментарий

0800 01 8E 35 LXI B,358E ; поместить в BC уменьшаемое

0803 11 C5 24 LXI D,24C5 ; поместить в DE вычитаемое

0806 79 MOV A,C ; подготовить и выполнить вычитание

0807 93 SUB E ; младших байтов без учёта заёма

0808 6F MOV L,A ; поместить младший байт результата в L

0809 78 MOV A,B ; подготовить и выполнить вычитание

080A 9A SBB D ; старших байтов с учётом заёма

080B 67 MOV H,A ; поместить старший байт результата в H

Команды типа SUB M , SBB Mобеспечивают выбор операнда-вычитаемого косвенно-регистровым методом, когда адрес операнда определяется в регистровой паре HL. Выполняемое командой SUB M действие:

(A) (A) – M(HL)

Выполняемое командой SBB M действие:

(A) (A) – M(HL) – (CY)

Пример 1.39

Выполнить вычитание 8Eh–C5h, если вычитаемое C5h находится в ячейке с адресом 0B00h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8E ; поместить в аккумулятор уменьшаемое

0802 21 00 0B LXI H,0B00 ; подготовить в HL адрес ячейки M

0804 96 SUB M ; выполнить вычитание: (A) (A) – M(HL)

Команды типа SUI d8 , SBI d8обеспечивают выбор операнда-уменьшаемого прямым методом, то есть путём указания числа в составе самой команды. Выполняемое командой SUI d8 действие:

(A) (A) – d8

Выполняемое командой SBI d8 действие:

(A) (A) – d8 – (CY)

Пример 1.40

Выполнить вычитание 8Eh–C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8E ; поместить в аккумулятор уменьшаемое

0802 D6 C5 SUI C5 ; выполнить вычитание: (A) (A) – C5h

Ещё один тип команд вычитания обеспечивает вычитание из задаваемого операнда числа 1, то есть декремент операнда. Операнд может быть определён одним из двух способов. В команде DCR r операнд определён регистровым способом и схема выполнения команды выглядит следующим образом:

(r) (r) – 1

В команде DCR M операнд определён косвенно-регистровым способом по адресу в регистровой паре HL и схема выполнения команды выглядит следующим образом:

M(HL) M(HL) – 1

В отличие от большинства других арифметическо-логических команд, воздействующих на все признаки, данные команды декремента никак не влияют на один из битов признаков – бит CY. На основе таких команд удобно организовывать вычитающие счётчики повторений каких-либо циклов операций с контролем количества повторений по признаку Z (см. пример 9.11).

Существуют также команды вычитания из двухбайтного операнда регистровой пары числа 1 то есть декремент регистровых пар: DCX B , DCX D , DCX H . Схема их выполнения:

(rp) (rp) – 1

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

Пример 1.41

Требуется выполнить обнуление области из 55h ячеек памяти, начинающейся по адресу 0B00.

Метка Мнемокод Комментарий

MVI C,55h ;загрузка счётчика повторений цикла

LXI H,0BF0h ;загрузка в HL указателя начала области

MVI A,00 ;обнуление аккумулятора

M00: MOV M,A ;обнуление очередной ячейки

INX H ;HLHL+1 продвижение указателя ячеек

DCR C ;CC–1 подсчёт ячеек и установка Z

JNZ M00 ;переход к M00, если не выполнено Z=1

HLT ;останов, если Z=1

На основе команды декремента DCR C здесь организуется счётчик проходов цикла, а на основе команды инкремента регистровой пары INX H реализуется модификация указателя ячеек рабочей области памяти. Вместо этой команды можно с тем же успехом применить команду DCX H, при этом число исходного значения указателя должно быть 0C45h.

Источник: https://studlib.info/informatika/125810-komandy-arifmeticheskikh-logicheskikh-i-sdvigovykh-operaciy/

Источник

Спасибо за ваше внимание к сайту нашим новым публикациям.