Команды «ИСКЛЮЧАЮЩЕЕ ИЛИ» (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:
возникает ситуация, когда сумма младших байтов дает число, большее 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|