Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Логические команды и команды сдвига.



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

AND –команда логического умножения И (конъюнкция) над битами операндов приемник и источник.

Формат команды: AND приемник, источник

OR - команда логического сложения ИЛИ (дизъюнкция) над битами операндов приемник и источник.

Формат команды: OR приемник, источник

XOR - команда логического исключающего сложения ИЛИ над битами операндов приемник и источник. Формат команды: XOR приемник, источник

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

 

Приемник Источник AND OR XOR

TEST –(“test – проверить”) команда логического сравнения посредством логического умножения И (конъюнкция) над битами операндов приемник и источник, но состояние операндов остается прежним, изменяются только флаги zf, sf, и pf, что дает возможность анализировать состояние отдельных битов операнда без изменения их состояния.

Формат команды: TEST приемник, источник

NOT -команда логического отрицания каждого бита операнда источник.

Формат команды: NOT источник. Команда инвертирует все биты операнда источник: из 1 в 0, из 0 в 1. Выполнение команды не влияет на флаги.

Примеры.

1. mov AL, 1111 0000b 2. mov AL, 1111 0000b 3. mov AL, 1111 0000b

and AL, 1010 1010b or AL, 1010 1010b xor AL, 1010 1010b

; результат 1010 0000b; результат 1111 1010b; результат 0101 1010b

4. mov AL, 11110000b 5.; проверить число на четность

not AL; AL=00001111b test AL, 0000 0001b

jz m

…; число нечетное

m: ; число четное

Из примеров видно, что команда AND может сбрасывать в 0 биты приемника, соответствующие нулевым битам источника, команда OR - устанавливать в 1 биты приемника, соответствующие единичным битам источника, а команда XOR – инвертировать биты приемника, соответствующие единичным битам источника.

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

По принципу действия команды сдвига можно разделить на два типа:

- команды линейного (логического SHL, SHR или арифметического SAL, SAR) сдвига;

- команды циклического (простого ROL, ROR и через флаг переноса RCL, RCR) сдвига.

Все команды сдвига перемещают биты в поле операнда влево или вправо в зависимости от кода операции. Все команды сдвига имеют одинаковый формат: первым операндом является операнд-источник, вторым операндом является количество сдвигов. Количество сдвигов либо указывается непосредственно в команде, либо перед выполнением команды сдвига заносится в регистр CL. Например,

 

  MOV CL, 4 .386
SHL AX, 1 SHL AX, CL SHL AX, 4 (для старших процессоров)

 

SHL – команда логического сдвига влево сдвигает содержимое операнда влево на количество битов, определяемое значением счетчик_сдвигов. Справа (в позицию младшего бита) записываются нули.

SHL операнд, счетчик_сдвигов

SHR -команда логического сдвига вправо сдвигает содержимое операнда вправо на количество битов, определяемое значением счетчик_сдвигов. Слева (в позицию старшего бита) записываются нули.

SHR операнд, счетчик_сдвигов

SAL– команда арифметического сдвига влево сдвигает содержимое операнда влево на количество битов, определяемое значением счетчик_сдвигов. Справа (в позицию младшего бита) записываются нули.

SAL операнд, счетчик_сдвигов

Команда SAL не сохраняет знака. Команда SAL полностью аналогична команде SHL.

SAR– команда арифметического сдвига вправо сдвигает содержимое операнда вправо на количество битов, определяемое значением счетчик_сдвигов. Слева (в позицию старшего бита) записываются нули, если сдвигается положительное число и единицы, если сдвигается отрицательное число.

SAR операнд, счетчик_сдвигов

Команда SAR сохраняет знак, восстанавливая его после сдвига каждого очередного бита.

ROL– команда циклического сдвига влево сдвигает содержимое операнда влево на количество битов, определяемое значением счетчик_сдвигов. Сдвигаемые влево биты записываются в тот же операнд справа.

ROL операнд, счетчик_сдвигов

ROR – команда циклического сдвига вправо сдвигает содержимое операнда вправо на количество битов, определяемое значением счетчик_сдвигов. Сдвигаемые вправо биты записываются в тот же операнд слева.

ROR операнд, счетчик_сдвигов

RCL – команда циклического сдвига влево через флаг переноса сдвигает содержимое операнда влево на количество битов, определяемое значением счетчик_сдвигов. Сдвигаемые биты поочередно становятся значением флага переноса CF. Одновременно старое значение флага переноса CF вдвигается в операнд справа и становится значением младшего бита операнда.

RCL операнд, счетчик_сдвигов

RCR – команда циклического сдвига вправо через флаг переноса сдвигает содержимое операнда вправо на количество битов, определяемое значением счетчик_сдвигов. Старое значение флага переноса CF вдвигается в операнд слева и становится значением старшего бита операнда

RCR операнд, счетчик_сдвигов

 

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

Система команд микропроцессора имеет очень интересную группу команд, позволяющих производить действия над блоками элементов от 1 Байта до 64 Кбайт (для 32-разрядных микропроцессоров – до 4 Гбайт). Это - цепочечные команды или команды обработки строк символов. Эти блоки логически могут представлять собой последовательности элементов с любыми значениями, хранящимися в памяти в виде двоичных кодов. Микропроцессор всегда предполагает, что строка-приемник находится в дополнительном сегменте (адресуемом посредством сегментного регистра ES), а строка-источник – в сегменте данных (адресуемом посредством сегментного регистра DS). Микропроцессор адресует строку - приемник через регистр DI, а строку-источник - через SI. Допускается переопределять сегмент для строки_источника, для строки-приемника этого делать нельзя.

Особенность работы цепочечных команд состоит в том, что они автоматически выполняют приращение или уменьшение содержимого регистров DI и SI в зависимости от используемой цепочечной команды. Что именно происходит с этими регистрами, определяется состоянием флага DF, которым управляют команды CLD и STD.

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

Пересылка строк:    
    MOVSB
MOVS адрес-приемника, адрес_источника => MOVSW
    MOVSD
Сравнение строк:    
    CMPSB
CMPS адрес-приемника, адрес_источника => CMPSW
    CMPSD
Сканирование строк:    
    SCASB
SCAS адрес-приемника => SCASW
    SCASD
Загрузка элемента из строки:    
    LODSB
LODS адрес_источника => LODSW
    LODSD
Сохранение элемента в строке:    
    STOSB
STOS адрес-приемника => STOSW
    STOSD

 

Задание и порядок выполнения работы

 

1. Напишите программу, подсчитывающую количество единиц в заданном байте или слове:

 

; в сегменте данных  
A DB 01101011B или A DW 0010111110101001B
                 

2. Измените программу для подсчета нулей.

3. Задан массив байтов А из чисел со знаками. Напишите программу, подсчитывающую количество отрицательных элементов массива. Ваш любой вариант принимается. А теперь напишите с использованием команды TEST.

4. Измените программу для подсчета положительных элементов массива.

5. Напишите программу преобразования двух неупакованных BCD- чисел в слове памяти в упакованное BCD-число в регистре AL.

6. Напишите программу пересылки символов из одной строки в другую

 

; в сегменте данных      
str_source DB ‘Строка_пересылаемая’, ’$’ ; строка-источник
str_dest DB 20 dup(? ) ; строка-приемник

 

7. Напишите программу посимвольного (поэлементного) сравнения двух строк.

8. Напишите программу поиска заданного символа в заданной строке, осуществите замену этого символа на другой, введенный с клавиатуры или заранее определенный в памяти.

9. Напишите программу, которая сравнивает две строки и первый несовпавший элемент помещает в регистр AL.

 

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-04-11; Просмотров: 1580; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.021 с.)
Главная | Случайная страница | Обратная связь