русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 1301; Нарушение авторских прав


Микропроцессор ЦП выполняет четыре основных арифме­тических действия - сложение, вычитание, умножение и деление над 8- и 16-разрядными данными со знаками и без знака. Числа со знаком представлены в ЦП в дополнительном коде и их диа­пазон составляет от -32768 до +32767. Для реализации арифметических действий над числами, представленными в двоично-десятичном коде, введены специальные команды коррекции ре­зультатов. Все арифметические команды влияют на флаги.

Операции сложения.Включают три мнемокода: ADD (сло­жить), ADC (сложить с учетом переноса) и INC (увеличить на единицу).

Команда ADD осуществляет сложение операнда источника с операндом места назначения. Источником и местом назначе­ния обычно являются регистр и память, причем источником могут быть также данные (константы), непосредственно пред­ставленные в команде. В первом формате поле d определяет место назначения результатов сложения: при d = 1 - это ре­гистр, а при d = 0 - память.

Во втором формате поле s определяет число байтов данных, непосредственно представленных в команде. При s=0 команда состоит из 4 байт, причем в двух последних записана 16-разряд­ная константа. При s=1 команда состоит из 3 байт и послед­ний, третий, содержит 8-разрядную константу, которая предва­рительно (т. е. до сложения) расширяется со знаком до 16 раз­рядов. Напомним, что расширение со знаком состоит в распространении значения знакового разряда байта на весь старший байт; например, константа 5Аh будет расширена до 005Аh, а константа 8Аh - до FF8Аh.

Команда ADC выполняет операцию сложения двух операн­дов с прибавлением значения флага CF. Она используется для организации сложения многоразрядных чисел, двоичное пред­ставление которых превышает 16 разрядов. Сначала по команде ADD суммируются младшие разряды, а затем при сложении старших разрядов чисел используется команда ADC, ко­торая позволяет учитывать единицу переноса. В качестве источ­ника и места назначения операндов может служить регистр ипамять.



Команда ADC имеет форматы, аналогичные форматам команды ADD.

Команда INC вызывает увеличение на единицу (инкрементирование) содержимого регистра или памяти. Необходимо отме­тить, что эта команда, так же как и команда DEC, влияет на все флаги, кроме CF.

Операции вычитания.Включают пять мнемокодов: SUB (вычесть), SBB (вычесть с учетом заема), DEC (уменьшить на единицу), NEG (изменить знак) и СМР (сравнить).

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

Команда SBB служит для вычитания операндов с учетом заема, т. е. наряду с операндами в вычитании участвует значе­ние флага CF.

Команда DEC вызывает уменьшение на единицу (декрементирование) содержимого регистра или памяти и имеет два формата, как и команда INC.

Команда NEG изменяет знак операнда, причем используется представление операнда в дополнительном коде. Например, если операнд есть -1 (11111111), то команда NEG изменит его на + 1 (00000001).

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

Операции умножения.Включают два мнемокода: MUL (ум­ножить) и IMUL (умножить числа со знаком).

По команде MUL происходит умножение без знака содержи­мого аккумулятора (AL или АХ) на операнд источника, а ре­зультат двойной длины возвращается в аккумулятор и регистр, используемый для его расширения (в AL и АН в случае 8-разрядных операндов или в АХ и DX в случае 16-разрядных операндов). Команда затрагивает только два флага CF и OF, которые устанавливаются в «1», если старшая половина резуль­тата отлична от нуля.

В отличие от операций сложения и вычитания обычное умножение чисел, представленных в двоичной системе счисле­ния, дает правильные результаты только для чисел без знака. Например, если рассматривать умножение 8-разрядных чисел 11111111В x 11111111В = 1111111000000001В как 255 x 255 = 65 025, то результат будет правильным. Если же эти перемно­жаемые числа рассматривать как числа со знаком (-1) x (-1), то результат -511 будет неверным. Когда перемножаемые операнды и результат рассматриваются как числа со знаком, используется команда IMUL.

Операции деления.Включают два мнемокода: DIV (разде­лить) и IDIV (разделить числа со знаком).

По команде DIV происходит деление без знака операнда двойной длины, находящегося в аккумуляторе и регистре, ис­пользуемом для расширения аккумулятора (в AL и АН в случае 8-разрядных операндов или в АХ и DX в случае 16-разрядных операндов) на операнд из заданного источника. Частное зано­сится в аккумулятор (AL или АХ), а остаток - в регистр расши­рения аккумулятора (АН или DX). При выполнении операции деления флаги принимают произвольные значения. При поло­жительном частном, превышающем максимально допустимое значение max, или при отрицательном частном, которое меньше, чем 0 - (mах+1), частное и остаток будут иметь неопределен­ные значения и произойдет прерывание типа 0.

Особенность команды деления IDIV состоит в том, что част­ное и остаток всегда имеют одинаковые знаки. Например, при делении числа -47 на +3 из двух возможных результатов: -15 с остатком -2 и -16 с остатком +1, будет получен пер­вый результат. Дробные значения частного округлены до бли­жайшего целого. Значения флагов при выполнении команды IDIVтакже не определены.

Операции коррекции результата позволяют выполнять ариф­метические действия над числами, представленными в двоично-десятичной системе счисления или в коде ASCII, используемом при обмене информацией и при вводе с клавиа­туры. Для коррекции результатов сложения и вычитания чисел в двоично-десятичной системе служат команды DAA (коррекция сложения) и DAS (коррекция вычитания).

Аналогичным образом, но с вычитанием констант 6 и 60Н осуществляется коррекция результата вычисления в AL по команде DAS.

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

Для коррекции результатов арифметических действий над числами в коде ASCII используются четыре команды: AAA (кор­рекция сложения), AAS (коррекция вычитания), ААМ (коррек­ция умножения) и AAD (коррекция деления).

К группе арифметических операций относятся также две команды, которые осуществляют расширение со знаком 8- и 16-разрядных операндов. Эти команды играют вспомогательную роль при подготовке операнда, используемого в качестве дели­мого. Поскольку делимое при делении 8-разрядных операндов размещается в 16-разрядном аккумуляторе АХ (а при делении 16-разрядных операндов в 32-разрядном составном регистре DX, АХ), необходимо при подготовке делимого заполнить АН (или DX). Для чисел без знака указанные регистры заполняются ну­лями. При делении чисел со знаком перед заполнением указан­ных регистров требуется анализировать знак делимого и запол­нить регистр либо нулями, если делимое является положитель­ным, либо единицами, если делимое отрицательное. Для этих целей используются команды CBW (расширение со знаком бай­та до слова) и CWD (расширение со знаком слова до двойного слова). По команде CBW (CWD) знак AL (или АХ), т. е. самый старший разряд регистра, записывается во все разряды регист­ра АН (или DX).



<== предыдущая лекция | следующая лекция ==>
Команды пересылки данных | Сдвиги и логические команды


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.