Команда логического отрицания NOT . — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

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

Команда логического отрицания NOT .

2024-02-15 20
Команда логического отрицания NOT . 0.00 из 5.00 0 оценок
Заказать работу

Команда NOT (HE) обращает состояние каждого бита регистра или ячейки памяти и ни на какие флаги не воздействует. Таким образом, команда NOT заменяет каждый 0 на 1, а каждую 1 – на 0. Другими словами, она выполняет для операнда дополнение до единицы.

Команда проверки TEST .

Команда TEST (test — проверить) выполняет операцию AND над опе­рандами, но воздействует только на флаги и не изменяет значения операндов. Команда TEST изменяет флаги точно так же, как команда AND: она обнуляет флаги CF и OF, изменяет флаги PF, ZF и SF, а флаг AF оставляет неопределенным.

Когда вслед за командой TEST указана команда JNZ (jump if not zero - перейти, если не нуль), переход произойдет только в том случае, если хотя бы в одной позиции бита оба операнда содержат 1.

Команды сдвига и циклического сдвига

У микропроцессора 8x86 есть семь команд, осуществляющих сдвиг 8-или 16-битового содержимого регистров или ячеек памяти на одну или несколько позиций влево или вправо. Три из них сдвигают операнд, а остальные четыре его вращают или циклически сдвигают.

Для всех семи команд флаг переноса CF является как бы расширением операн­да битом 9 или битом 17. Иначе говоря, флаг CF приобретает значение бита, сдви­нутого за один из концов операнда. Команды сдвига и циклического сдвига вправо помещают во флаг CF значение нулевого бита. Команды сдвига и цикли­ческого сдвига влево помещают в него значение бита 7 (при операциях над бай­том) или бита 15 (при операциях над словом).

Команды сдвига и циклического сдвига распадаются на две группы. Логичес­кие команды сдвигают операнд, не считаясь с его знаком; они используются для действий над числами без знака или над нечисловыми значениями, например над масками. Арифметические команды сохраняют старший, знаковый бит операнда; они используются для действий над числами со знаком. На рис. 1 показано действие этих команд.

Команды сдвига и циклического сдвига имеют два операнда: приемник и счетчик. Приемником может быть 8- или 16-битовый регистр общего назначения или ячейка памяти. Счетчик может быть цифрой 1 или значением без знака в регистре CL.

 

Рис. 1. Команды сдвига и циклического сдвига

Команды сдвига

Команды SAL (shift arithmetic left - сдвинуть влево арифметически) и SAR (shift arithmetic right - сдвинуть вправо арифметически) сдвигают числа со знаком. Команда SAR сохраняет знак операнда, репродуцируя его при выполне­нии сдвига. Команда SAL не сохраняет знак, но заносит 1 во флаг переполнения OF в случае изменения знака операнда. При каждом сдвиге операнда команда SAL заносит 0 в вакантный нулевой бит этого операнда.

Команды SHL (shift logical left - сдвинуть влево логически) и SHR (shift logical right - сдвинуть вправо логически) сдвигают числа без знака. Команда SHL идентична команде SAL. Команда SHR аналогична команде SHL, но сдвигает операнд не влево, а вправо. При каждом сдвиге операнда команда SHR заносит 0 в вакантный старший бит этого операнда (бит 7 при сдвиге байта, бит 15 при сдвиге слова).

Помимо флагов CF и OF команды сдвига изменяют флаги PF, ZF и SF, а флаг AF оставляют неопределенным.

Чтобы познакомиться с работой команд сдвига, предположим, что регистр AL содержит ОВ4Н, а флаг переноса CF равен 1. В двоичном коде

AL = 10110100 CF = 1

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

После SAL AL,1 :

AL = 01101000 CF = 1

После SAR AL,1:

AL = 11011010 CF = О

После SHL AL,1: 

AL = 01101000 CF = 1

После SHR AL,1:

AL = 01011010 CF = 0

Имеется несколько интересных приложений команд сдвига. Например, в следующем фрагменте команд команда SHL используется для преобразования двух неупакованных BCD-чисел (старшая цифра извлекается из регистра BL, младшая - из регистра AL) в упакованное BCD-число в регистре AL:

MOV CL,4 ;3агруэить счетчик сдвига в CL

SHL BL,CL ;Сдвинуть старшую цитру в старшие четыре бита BL

OR AL,BL ;Получить упакованное BCD-число слиянием AL и BL

Поскольку сдвиг операнда на один бит влево удваивает значение операнда (умножает на 2), а сдвиг на один бит вправо уменьшает значение операнда вдвое (делит на 2), то команды сдвига можно использовать в качестве команд быстрого умножения и деления.

Следующие команды сдвига показывают, каким образом можно разделить на четыре содержимое регистра АХ. Во всех случаях предполагается, что регистр CL содержит 2.

 

SHL AX,CL ;Умножить число без знака на 4

SAL AX,CL ;Умножить число со знаком на 4

SHR AX,CL ;Разделить число без знака на 4

SAR AX,CL ;Разделить число со знаком на 4

 

Применяя команды сдвига вместо команд умножения и деления, можно сэкономить немало времени. Каждая из предыдущих команд сдвига выполняется за 16 тактов. Еще 4 такта требуется для загрузки значения в регистр CL, итого - 20 тактов. Сравнивая это время с минимальными временами исполнения команд MUL (118 тактов), IMUL (l28 тактов), DIV (144 такта) и IDIV (165 тактов), мы видим, что команды сдвига выполняют эти действия в шесть-восемь раз быстрее, чем команды умножения и деления!

В то время как отдельная команда сдвига может умножить или разделить только на степень числа 2, манипулирование несколькими регистрами позволяет выполнить умножение или деление на другие числа. Например, приведенная ниже последовательность команд умножает содержимое регистра АХ на 10:

MOV ВХ,10 ;Сохранить содержимое в ВХ

SHL АХ,1 ;Сдвинуть AХ (умножить на 2)

SHL AХ,1 ;Сдвинуть AХ еще раз (умножить на 4)

ADD АХ,ВХ ;Сложить с исходным, значением АХ (умножить на 5)

SHL АХ,1 ;Сдвинуть AХ еще раз (умножить на 10)

Хотя в этой последовательности пять команд, но выполняется она в 11 раз быст­рее одной команды MUL!

Команды циклического сдвига

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

При исполнении команды ROL (rotate left - сдвинуть влево циклически) и ROR (rotate right - сдвинуть вправо циклически) вышедший за пределы операнда бит входит в него с противоположного конца. При исполнении команд RCL (rotate left through carry - сдвинуть влево циклически вместе с флагом переноса) и RCR (rotate right through carry - сдвинуть вправо циклически вместе с флагом перено­са) в противоположный конец операнда помещается значение флага переноса CF. Все команды циклического сдвига воздействуют только на флаги CF и OF.

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

AL = 10110100 CF = 1

Команды циклического сдвига воздействуют на регистр AL и флаг CF следующим образом:

После ROL AL,1:

AL = 01101001 CF = 1

После ROR AL,1:

AL = 01011010 CF = 0

После RCL AL,1:

AL = 01101001 CF = 1

После RCR AL,1:

AL = 11011010 CF = 0

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

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

 

F = Y оп1 КОН1 оп2 Х оп3 КОН2

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

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

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

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

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

       Если размер результат будет более 16 бит – результат преобразовывать в 16-битный.

 

Таблица 1.

 

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

0 1 2 3 4 5 6 7 8 9
  КОН1   10   96   20   12    130    24   64   32    6   40
  КОН2      32    16   8   4   128   64   36   22   14   72

 

Таблица 2.

 

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

0 1 2 3 4 5 6 7 8 9
  оп1     /   /   *     *   /   *   —   +   /   *
  оп2     –   +   –     +   %   %   *   *   +   +
  оп3     *   *   /     /   *    /   /   /   –   –

 

Таблица 3.

 

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

0 1 2 3 4 5 6 7 8 9
  X   char un char int un int int un char int char char un int
  Y   int un int char un char int un int int int char un char

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

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

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

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

                                  

Пример. У студента индивидуальный вариант 990. Строим индивидуальное выражение для вычисления:                              F = Y * 40 + X — 72

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

                   char x;

                   int y;

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

;y*40=y*32+y*8;

; адрес у = 300, адрес x= 400

; Первоначально исходные данные заносятся на стартовые адреса памяти

 mov ax,[y]

mov bx,ax

mov cl,3

shl ax,cl ;y*8

mov cl,5

shl bx,cl ; y*32

add bx,ax

mov al,[x]

cbw    ;преобразуем 8-битное x в 16 битное

add bx,ax ;y*40+x

sub bx,72 ;y*40+x-72

mov f,bx

; проверяем на четность

mov iChet,bx

and iChet,0001h

; проверяем на знак

mov iSign,bx

and iSign,8000h

 

 

; результаты сохраняем с адесов Y=500, X=600 четность, 506 и 606 – знаковость

 

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

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

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

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

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

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

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

7. Выводы.

 

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

1. Логические команды: формат и правила применения

2. Команды сдвига: формат и правила применения.

3. Команды циклического сдвига: формат и правила применения.

 

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

 

«Создание простейших .СОМ и .ЕХЕ программ»

Цель работы: изучить форматы и правила работы транслятором ТАSM.

 

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

 


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

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

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

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

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



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

0.047 с.