- •Лабораторная работа №1. Использование арифметических и логических команд процессора при составлении программ на языке ассемблера
- •2.1.2 Команды вычитания
- •2.1.3 Использование команд neg и cmp
- •2.1.4 Умножение и деление беззнаковых чисел
- •Программа 2.2. Muldiv.Asm
- •2.1.5 Умножение и деление знаковых значений
- •2.2 Логические команды процессора
- •2.2.1 Логические операторы
- •2.2.2 Сдвиги битов
Лабораторная работа №1. Использование арифметических и логических команд процессора при составлении программ на языке ассемблера
1 Цель и порядок работы
Цель работы – изучить арифметические и логические команды процессора и их использование при разработке программ на языке ассемблера.
Порядок выполнения работы:
ознакомиться с описанием лабораторной работы;
получить задание у преподавателя по вариантам;
написать программу, ввести программу, отладить и решить ее на ЭВМ;
оформить отчет.
2 Краткое теоретическое содержание работы
2.1 Арифметические команды процессора
В язык ассемблера входит относительно небольшое количество примитивных математических операторов. Математические команды ограничиваются сложением, умножением, делением и вычитанием знаковых и беззнаковых целых двоичных чисел. Математические команды процессора 8086 представлены в табл. 2.1.
2.1.1 Команды сложения
Команды add и adc, суммируют два байта или слова. Inc (инкремент) —Команда быстрого добавления 1 к регистру или значению в памяти. Aaa и daa выполняют коррекцию значений, представленных в двоично-десятичном формате. Для сложения 8-битового значения в ah с 8-битовым значением в bh запишем: add ah, bh ; ahah+bh
Для add требуется операнд-источник и операнд-назначение. Команда суммирует два значения и записывает результат в заданное место, заменяя первоначальное значение. В примере результат записан в регистр ah. Команда adc работает аналогично, но добавляет к результату флаг переноса cf:
adc ah, bh ;ahah+bh+cf
Если cf равен 1, то результат получается таким же, как при добавлении 1 к сумме ah и bh. Флаг cf устанавливается в 1, если в предыдущем сложении возникло переполнение. Поэтому adc чаще используют для после add, складывающего многобайтовые значения, информируя о переносах, которые возникают при сложении отдельных байтов. Как add, так и adc могут прибавлять к регистрам и значениям в памяти непосредственные (литеральные) значения: add bx, 5 ; bxbx+5
Для быстрого прибавления 1 к некоторому значению, вместо add используют “inc”. Следующие команды увеличивают на 1 значения четырех регистров общего назначения: inc ax ;axax+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. Остальные флаги считаются не уничтоженными.
