Команда уменьшения содержимого приемника на единицу DEC — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

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

Команда уменьшения содержимого приемника на единицу DEC

2024-02-15 23
Команда уменьшения содержимого приемника на единицу DEC 0.00 из 5.00 0 оценок
Заказать работу

Команда DEC (decrement - уменьшить) вычитает 1 из содержимого регистра или ячейки памяти, но при этом (в отличие от команды SUB) не воздейст­вует на флаг переноса CF. Команда DEC часто используется в циклах для умень­шения значения счетчика до тех пор, пока оно не станет нулевым или отрицатель­ным. Ее можно использовать также для уменьшения значения индексного регистpa или указателя при доступе к последовательно расположенным ячейкам памя­ти.

Приведем несколько примеров:

 

DEC CX         ;Уменьшить знамение 16-битового

DEC AL         ; или 8-битового регистра

DEC MEM_BYTE   ;Уменьшить значение байта

DEC MEM_WORD[BX] ;или слова памяти

Команда обращения знака NEG .

Команда NEG вычитает значение операнда-приемника из нулевого значения и тем самым формирует его дополнение до двух. Команда NEG оказыва­ет на флаг то же действие, что и команда SUB. Но поскольку один из операндов равен 0, то можно точнее описать условия изменения состояний флагов. Итак, при исполнении команды NEG флаги изменяются следующим образом:

Флаг переноса CF и флаг знака SF равны 1, если операнд представляет собой ненулевое положительное число; в противном случае они равны 0.

Флаг четности PF равен 1, если результат имеет четное число битов, равных 1; в противном случае он равен 0.

Флаг нуля ZF равен 1, если операнд равен 0; в противном случае он равен 0.

Флаг переполнения OF равен 1, если операнд-байт имеет значение 80Н или операнд-слово имеет значение 8000Н; в противном случае он равен 0.

Команда NEG полезна для вычитания значения регистра или ячейки памяти из непосредственного значения. Например, Вам нужно вычесть значение регистра AL из 100. Так как непосредственное значение не может служить приемником, то команда SUB 100, AL недопустима. В качестве альтернативы можно обратить знак содержимого регистра AL и добавить к нему 100:

 

NEG AL

ADD AL,100

 

Команда расширения знака.

Существуют две команды, позволяющие выполнять операции над смешанными данными за счет удвоения размера операнда со знаком. Команда CBW (convert byte to word — преобразовать байт в слово) воспроизводит 7-й бит регистра AL во всех битах регистра AH.

Команда CWD (convert word to double word — преобразовать слово в двойное слово) воспроизводит 15-й бит регистра AX во всех битах регистра DX.

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

Приведем несколько примеров:

 

CBW                     ;Сложить байт в AL со словом в BX

ADD AX,BX

CBW                     ;Умножить байт в AL на слово в BX

IMUL BX

CWD                     ;Разделить слово в AX на слово в BX

IDIV BX

 

Индивидуальное задание.

1 Вычислить сумму элементов массива согласно варианту и переслать результат в элемент массива с заданным номером (табл.3  Лабораторная работа №2).

2. Каждому студенту выдается 4-хзначный вариант. Согласно этому варианту вычислить следующее выражение:

 

       F = КОН1 оп1 (КОН2 оп2 Х оп3 Y ) оп4 Z оп5 КОН3

       где

                КОН1, КОН2, КОН3 – числовые константы, согласно табл. 1

                   оп1, оп2, оп3, оп4, оп5 – операции сложения и вычитания согласно табл. 2

                   X, Y – переменные, тип которых определяется согласно табл. 3

       Числовые константы из табл. 1 берутся согласно первой цифре варианта, операции сложения и вычитания из табл. 2 – согласно второй цифре варианта, а размер и тип переменных – из табл. 3 согласно третьей цифре варианта.    

       Исходные данные хранятся в памяти с адреса 0900H, вычисление выражения производится на Ассемблере, выводимые результаты — располагаются в памяти с адреса 1000Н.

 

Таблица 1.

 

Первая цифра варианта

0 1 2 3 4 5 6 7 8 9
  КОН1   12   12569   87935   12   78   4596   12597563   4589   369   458
  КОН2     1369   12   588   96385   47   589   78   29   3856   481
  КОН3   3699   4589   12   3698   4589632   2385   2852   562235   336   36

 

 

Таблица 2.

 

Вторая цифра варианта

0 1 2 3 4 5 6 7 8 9
  оп1     +   —   —     +   +   +   +   —   —   —
  оп2     +   +   +     —   —   +   —   —   +   +
  оп3     —   +   —     —   +   —   +   +   —   +
  оп4     +   +   —     —   +   —   —   +   +   +
  оп5   —   +   +     +   —   +   +   +   +   —

 

 

Таблица 3.

 

Третья цифра варианта

0 1 2 3 4 5 6 7 8 9
  X   Char un char int un int int un long int char char un long
  Y   Int un int long un char long un int int long char un char
  Z    Char un long int un int char un char char char long un int

Примечания:        – char         – 8 битн. со знаком

– un. char – 8 битн. без знака

                              – int           – 16 битн. со знаком

– un. int     – 16 битн. без знака

                              – long         – 32 битн. со знаком

– un. long – 32 битн. без знака

Пример. У студента индивидуальный вариант 990. Строим индивидуальное выражение для вычисления:                              F=458 – (481 + X + Y) + Z — 36

       Согласно варианту переменные X, Y и Z должны быть описаны следующим образом

                   char x, z;

                   int y,f;

       Ассемблерный фрагмент выглядит следующим образом:

                   mov bx, 481h // Пересылаем константу в регистр AX

                   mov al,x                     

                   cbw                        // Расширяем число X до 16 бит

                   add bx,ax              // 481h + X

                   add bx, y               // 481h + X + Y

       mov al,z

                   cbw                    // Расширяем число Z до 16 бит

                   add bx,ax              // (481h + X + Y) +Z

                   sub bx,36h // (481h + X + Y) +Z - 36h

       mov cx, 458h

                   sub cx, ax

                   mov f,cx

Содержание отчета:

1. Название работы

2. Цель работы

3. Приборы и оборудование

4. Краткие теоретические сведения

5. Индивидуальное задание

6. Распечатанный текст программы

7. Выводы.

 

       Вопросы к защите лабораторной работы.

1. Форматы арифметических данных.

2. Формат и правила применения команд ADD и ADC.

3. Воздействие на флаги команд ADD и ADC.

4. Формат и правила применения команд SUB и SBB.

5. Воздействие на флаги команд SUB и SBB.

6. Команды обращения знака.

7. Команды расширения знака.


Лабораторная работа №4

 «Изучение команд умножения и деления»

 

Цель работы: изучить форматы и правила работы с командами умножения и деления микропроцессора i8086.

 

Оборудование: IBM - совместимый персональный компьютер, работающий под управлением операционной системы, совместимой с MS-DOS®.

 

Программное обеспечение: Программа DEBUG.


Поделиться с друзьями:

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

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.023 с.