Краткие сведения из теории
Факультет информационных технологий и робототехники (ФИТР)
Кафедра программного обеспечения вычислительной техники
и автоматизированных систем
Отчет по лабораторной работе № 6
по дисциплине: ”Языки программирования”
(Assembler)
на тему ”Программирование вычислительных операций микропроцессора”
Выполнили: студенты группы Урбанович С.Б.
107221 Микульский А.С.
Приняла: Несенчук А.А.
Минск 2012
Цель работы: изучение арифметических команд микропроцессора и формирование вычислительных алгоритмов.
Краткие сведения из теории
Над двоичными числами со знаком и без знака могут быть выполнены следующие действия: сложение, вычитание, умножение и деление.
Сложение двоичных чисел
В системе команд микропроцессора имеются три команды двоичного сложения:
1. Операция инкремента: inc операнд
Означает увеличение значения операнда на 1.
2. Команда сложения: add операнд_1, операнд_2.
Принцип ее действия: операнд_1=операнд_1+ операнд_2.
3. Команда сложения с учетом флага переносa cf: adc операнд_1,операнд_2.
Принцип действия команды: операнд_1=операнд_1+операнд_2+значение _cf.
Вычитание двоичных чисел
К командам вычитания относятся следующие:
1. Операция декремента: dec операнд.
Означает уменьшение значения операнда на 1.
2. Команда вычитания: sub операнд_1, операнд_2.
Принцип ее действия: операнд_1=операнд_1- операнд_2.
3. Команда вычитания с учетом заема(флага cf):sbb операнд_1,операнд_2.
Принцип действия команды: операнд_1=операнд_1-операнд_2-значение _cf.
Умножение чисел без знака и со знаком
Для умножения чисел без знака предназначена команда mul сомножитель_1.
В команде указан только один операнд-сомножитель. Второй операнд-сомножитель_2- задан неявно. Его местоположение фиксировано (например, для байта - в регистре al) и зависит от размера сомножителей. Так как о общем случае результат умножения больше, чем любой из сомножителей, то его размер и местоположение должны быть тоже определены однозначно.
Для указания превышения результатом умножения размера регистра используются флаги переноса cf и переполнения of.
Для умножения чисел со знаком предназначена команда imul операнд_1[,операнд_2, операнд_3].
Эта команда выполняется так же, как и команда mul. Отличительной особенностью команды imul является только формирование знака.
Если результат мал и умещается в одном регистре (т.е. cf=of=0), то содержимое другого регистра (старшей части) является расширением знака- все его биты равны старшему биту (знаковому разряду) младшей части результата.
В противном случае (если cf=of=1) знаком результата является знаковый бит старшей части результата, а знаковый бит младшей части является значащим битом двоичного кода результата.
Деление чисел без знака и со знаком
Для деления чисел без знака предназначена команда div делитель. Делитель может находиться в памяти или в регистре и иметь размер 8,16 или 32 бит. Местонахождение делимого фиксировано (например, для слова- в регистре ax) и, так же как в команде умножения, зависит от размера операндов. Расположение частного и остатка также фиксировано. Результатом команды деления являются значения частного и остатка.
Для деления чисел со знаком предназначена команда idiv делитель.
Для этой команды справедливы все рассмотренные положения, касающиеся команд и чисел со знаком.
2 Постановка задачи
Разработать программу на ассемблере, реализующую вычисление значения x по следующей формуле: x=(a+b)*(c-b)/ d*5.