Краткие сведения из теории

Факультет информационных технологий и робототехники (ФИТР)

 

Кафедра программного обеспечения вычислительной техники

и автоматизированных систем

 

 

Отчет по лабораторной работе № 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.