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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

микросхем и имеют много общего в логике программирования. Команды 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.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 1476; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.89.116.152 (0.043 с.)