Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Команды «ИСКЛЮЧАЮЩЕЕ ИЛИ» (XOR).

ЛАБОРАТОРНАЯ РАБОТА №2

«АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ»

ЦЕЛЬ РАБОТЫ

 

Цель работы: изучение команд арифметических и логических операций. В лабораторной работе необходимо написать программу на языке ассемблера, демонстрирующую работу арифметических и логических команд [3].

 

СОЗДАНИЕ ИСХОДНОГО ТЕКСТА ПРОГРАМЫ

 

Данная программа демонстрирует работу арифметических и логических команд процессора Pentium.

 

;prog.

Data SEGMENT

A DB 35h, 78h, 0FFh

Array DB 12h, 10h, 0FFh, 25h, 32h, 67h, 59h; массив Array

Sum DW 0

B DB 5

Data ENDS

;prog. code

Code SEGMENT

ASSUME CS: Code, DS: Data

Start: mov AX,Data;

mov DS,AX;

mov AH,3

add AH,37h

sub AH,3Bh

mov SI,1

add SI,2

sub SI,4

mov BL,1

neg BL;

mov BH,-128

neg BH

mov DL,-1

inc DL

mov DH,127

inc DH

inc byte ptr A

inc word ptr A

 

xor AX,AX;

xor SI,SI;

mov CL,7;

M: add AL, Array[SI];

adc AH,0

inc SI;

dec CL;

jnz M;

mov Sum, AX; Да.

mov DH,5

cmp DH,28

cmp DH,B

mov AL,3

mov DL,2

mul DL

mul B

mov AX,8

mov DH,2

div DH

div B

mov AL,01010101b

and AL,11010100b

push B

or B,11110000b

pop B

xor AL,3

xor AL,AL

test B,00000001b

not AL;

xor AL,AL

mov AL,10011010b

rcl AL

ror AL

sar AL

shr AL

mov AH,4Ch

int 21h

Code ENDS

END Start

 

3. ЗАДАНИЕ НА РАБОТУ

 

Составьте и выполните программу, реализующую арифметические и логические операции. Проверьте ее работу по шагам с помощью отладчика.

 

СОДЕРЖАНИЕ ОТЧЕТА

 

· Название и цель работы.

· Назначение программы.

· Текст программы на языке ассемблера.

· Выводы по работе.

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Определение прямого, обратного и дополнительного кода?

2. Перечислите арифметические команды с подробной характеристикой каждой.

3. Перечислите логические команды с подробной характеристикой каждой.

4. Нарисуйте программную архитектуру процессора

5. Перечислите регистры микропроцессора

6. Опишите работу команд сравнения

 

 

Приложение А

(теоретические основы)

Команды сложения

 

Назначение команд этой группы вытекает из названия - прибавить число или содержимое регистра (пары) или содержимое индексированного адреса к содержимому регистра (пары). Это первая из групп арифметических команд, с которыми мы еще столкнемся. Сразу отметим, что команды этой группы работают в абсолютной двоичной арифметике. Все команды этой подгруппы влияют на флаг переноса (С -флаг). В зависимости от того, превосходит ли результат сложения FF (255) для однобайтного сложения или FFFF (65535) для двухбайтного сложения содержимого двух регистровых пар, С -флаг либо включается, либо выключается.

 

Например: 2D + C0 = ED (45+192=237) -> C =0;

5D + C0 = 1D (93+192=29) -> C =1.

 

Приращение.

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

Поскольку назначение команд «инкремент» состоит не в выполнении операций сложения, а в организации счетчиков, они не влияют на флаг переноса.

Обратите внимание на разницу команд INC HL и INC (HL).

INC HL - прямая команда для регистра HL, она гласит «увеличить на единицу содержимое регистровой пары HL».

INC (HL) - пример применения косвенной адресации; эта команда означает «увеличить на единицу содержимое ячейки памяти, адрес которой находится в регистре HL».

 

Сложение с учетом переноса.

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

После окончания операции флаг переноса устанавливается в соответствии с результатом (есть перенос - включен, нет - выключен).

Применяются они при сложении многобайтных чисел. Так, например, при сложении двухбайтных чисел 035D и A0C0:

03 5D
+ A0 C0
-----
A4 1D

 

возникает ситуация, когда сумма младших байтов дает число, большее 255 (FF). В этот момент и устанавливается флаг переноса. При сложении же старших байтов эта единица будет к ним прибавлена, если сложение производится командой ADC.

 

 

Команды вычитания

Команды этой группы прямо противоположны командам предыдущей группы. Они также работают в абсолютной двоичной арифметике. Их тоже можно разбить на три подгруппы. Команды этой подгруппы начинаются с мнемоники SUB и влияют на флаг переноса, но здесь в отличие от команд ADD флаг переноса устанавливается не когда байт переполняется, а когда при вычитании производится заем, т.е. когда вычитаемое больше уменьшаемого. Обратите внимание на то, что действие всех этих команд относится к регистру А (аккумулятору), поэтому в мнемониках на него нет указаний, это принимается по умолчанию.

Так, SUB (HL) означает SUB A,(HL) – «вычесть из содержимого аккумулятора то число, которое находится в ячейке памяти, адрес которой находится в регистровой паре HL».

 

Уменьшение (декремент).

Декремент(DEC) - уменьшение содержимого регистра или ячейки памяти на единицу. Операция прямо противоположна инкременту. Так же, как и последняя, она служит не столько для вычитания, сколько для организации каких-либо счетчиков, а потому она тоже не влияет на флаг переноса.

 

Команды «И» (AND).

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

 

Пример: Первый операнд 1010 1010 (AA)

Второй операнд 1100 0000 (CO)

---------------------------------

Результат AND 1000 0000 (B0)

 

Как видите, операция производится побитно, т.е. нулевой бит первого числа сравнивается с нулевым битом второго, первый с первым, второй со вторым и т.д.

С помощью команды AND можно довольно эффектно сбрасывать биты аккумулятора. Например, если Вам нужно его обнулить, дайте команду:

AND 0 (E6 0)

Команда «ИЛИ» (OR).

Эта команда также исполняется побитным сравнением двух двоичных чисел. Ее результат равен единице, если данный бит включен в первом или во втором операнде или в обоих вместе. Таким образом, в результате может быть 0 только если в обоих операндах 0, а в противном случае - 1.

 

Пример: Первый операнд 1010 1010 (AA)

Второй операнд 1100 0000 (C0)

---------------------------------------

Результат OR 1110 1010 (EA)

 

Эта команда позволяет Вам столь же эффективно включать нужные биты в аккумуляторе (или проверять их включение), как команда AND позволяла их выключать. Например, если Вам надо, чтобы в аккумуляторе были гарантированно включены биты 5, 3, 2 - дайте команду OR 2С (20 + 8 + 4 = 2C).

Интересна команда OR A. В результате ее действия производится сравнение по «ИЛИ» содержимого аккумулятора с ним же самим. Разумеется, в результате в аккумуляторе ничего не изменится, но зато гарантированно будет сброшен флаг переноса (флаг С регистра F). Такой же результат дает и применение команды AND A. Обе эти команды очень часто используются в программах именно для этой цели.

Команды «ИСКЛЮЧАЮЩЕЕ ИЛИ» (XOR).

В отличие от «ИЛИ» здесь результат равен 1, если хотя бы один из операндов равен 1, но не оба вместе. В остальных случаях он равен нулю.

 

Пример: Первый операнд 1010 1010 (AA)

Второй операнд 1100 0000 (C0)

---------------------------------

Результат XOR 0110 1010 (6A)

 

Команда XOR A часто используется для обнуления аккумулятора. Это же можно сделать и командой LD A,0, но XOR короче (один байт вместо двух), а кроме того при команде XOR, как и при всех командах логики AND, OR, XOR сбрасывается флаг переноса, а команды группы загрузки LD на флаги влияния не оказывают.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...