Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр_1_ЭВМ и ПУ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
238.08 Кб
Скачать

Лабораторная работа №1. Использование арифметических и логических команд процессора при составлении программ на языке ассемблера

1 Цель и порядок работы

Цель работы – изучить арифметические и логические команды процессора и их использование при разработке программ на языке ассемблера.

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

  • ознакомиться с описанием лабораторной работы;

  • получить задание у преподавателя по вариантам;

  • написать программу, ввести программу, отладить и решить ее на ЭВМ;

  • оформить отчет.

2 Краткое теоретическое содержание работы

2.1 Арифметические команды процессора

В язык ассемблера входит относительно небольшое количество примитивных математических операторов. Математические команды ограничиваются сложением, умножением, делением и вычитанием знаковых и беззнаковых целых двоичных чисел. Математические команды процессора 8086 представлены в табл. 2.1.

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

Команды add и adc, суммируют два байта или слова. Inc (инкремент) —Команда быстрого добавления 1 к регистру или значению в памяти. Aaa и daa выполняют коррекцию значений, представленных в двоично-десятичном формате. Для сложения 8-битового значения в ah с 8-битовым значением в bh запишем: add ah, bh ; ahah+bh

Для add требуется операнд-источник и операнд-назначение. Команда суммирует два значения и записывает результат в заданное место, заменяя первоначальное значение. В примере результат записан в регистр ah. Команда adc работает аналогично, но добавляет к результату флаг переноса cf:

adc ah, bh ;ahah+bh+cf

Если cf равен 1, то результат получается таким же, как при добавлении 1 к сумме ah и bh. Флаг cf устанавливается в 1, если в предыдущем сложении возникло переполнение. Поэтому adc чаще используют для после add, складывающего многобайтовые значения, информируя о переносах, которые возникают при сложении отдельных байтов. Как add, так и adc могут прибавлять к регистрам и значениям в памяти непосредственные (литеральные) значения: add bx, 5 ; bxbx+5

Для быстрого прибавления 1 к некоторому значению, вместо add используют “inc”. Следующие команды увеличивают на 1 значения четырех регистров общего назначения: inc ax ;axax+1

Команда aaa преобразует содержимое регистра AL в правильную неупакованную десятичную цифру в младших четырех битах регистра AL и заполняет нулями старшие четыре бита. Она используется в контексте:

add al, bl ;Сложить неупакованные числа в al и bl

aaa ;преобразовать результат в неупакованное число

Если результат превышает 9, то команда aaa добавляет 1 к содержимому AH и устанавливает CF в 1; в противном случае CF=0. Остальные флаги считаются уничтоженными(AF, PF, ZF, SF, OF).

Команда daa преобразует содержимое регистра AL в две правельные упакованные десятичные цифры. Она используется в контексте:

aad al, bl ;Сложить упакованные десятичные числа в al и bl

daa ;преобразовать результат в упакованное число

Если результат превышает предельное значение для упакованных десятичных чисел (99), то команда daa добавляет 1 к содержимому регистра AH и устанавливает флаг CF в 1. Остальные флаги считаются не уничтоженными.