Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Инфоурок / Информатика / Другие методич. материалы / Лабораторная работа "Арифметические операции. Битовые команды"

Лабораторная работа "Арифметические операции. Битовые команды"


  • Информатика

Поделитесь материалом с коллегами:

Методические указания к выполнению лабораторных работ по МДК 01.01 «Системное программирование»

для специальности 09.02.03 «Программирование в компьютерных системах»


Лабораторная работа №7

Тема: «Арифметические операции. Битовые команды»

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

Ход работы:

  1. Изучить теоретическую часть

  2. Выполнить задание в соответствии с указаниями

  3. Ответить на контрольные вопросы

  4. Предъявить преподавателю результаты работы: проект и исходный код

  5. Оформить отчет в соответствии с ходом работы

Теоретическая часть:

Арифметические операции на языке ассемблера выполняются над целыми числами четырех типов:

Беззнаковыми двоичными, знаковыми двоичными, упакованными десятичными и неупакованными десятичными.

В данной лабораторной работе рассматриваются арифметические операции над беззнаковыми числами.

Используются следующие команды:

ADD – сложить, SUB – вычесть.

Описание команд: Работают с 8 и 16 битовыми операндами, инструкция ADD выполняет сложение операнда источника (правого операнда) с содержимым операнда приемника (левый операнд), результат помещается в операнд приемник. Инструкция SUB делает тоже самое, только она вычитает операнд источник из операнда приемника, результат помещается в операнд приемник. Операндами могут быть регистры, константы, ячейки памяти в различных комбинациях, но нельзя добавить (вычесть) значение одной ячейки памяти к другой, а также в качестве операнда источника использовать константу (непосредственное значение). Команда воздействует на шесть флагов: AF, CF, OF, PF, SF, ZF.

Например, флаг переноса CF=1 если результат действия не помещается в операнде приемнике, в противном случае CF=0.

MUL - умножить.

Описание команд: инструкция MUL перемножает 8 и 16 битовые беззнаковые множители, создавая 16 или 32 битовое произведение. При 8 битовом произведении один из операндов в регистре AL другой может быть 8 битовым регистром общего назначения или переменной памяти соответствующего назначения. Результат помещается в регистр AX (16 битовый). При 16 битовых множителях один из сомножителей в 16 битовом регистре общего назначения другой в переменной памяти, 32 битовый результат в регистрах DX:AX. При этом младшие 16 бит в AX старшие в DX.

Команда воздействует на два флага: CF, OF.

DIV – разделить.

Описание команд: позволяет разделить 32 битовое значение на 16 битовое значение или 16 битовое на 8 битовое. При делении 16 битового значения делимое помещается в AX, 8 битовый делитель помещается в регистр или в переменную соответствующего размера. Результат (8 битовый) помещается в AL, остаток в AH.

Состояние флагов не определено, но если частное не помещается в регистре AL (AX) процессор генерирует прерывание типа 0 (деление на 0). В заданиях используются директивы и команды, изученные в предыдущих лабораторных работах.

БИТОВЫЕ КОМАНДЫ

Битовые команды рассматривают свои операнды не в виде привычных уже байтов, слов и двойных слов, в виде последовательности битов. Эти команды реализуют логические операции и команды сдвигов.

Логические операции (или булевы команды) – как, следует из названия, выполняют логические операции – отрицание, конъюнкцию, дизъюнкцию и им присуще ряд черт.

hello_html_266dfb8b.png

Команда not на флаги не действует и работает по следующему принципу. Например:

hello_html_37fff253.png

Все остальные команды сбрасывают CF и OF, а флаги SF, ZF, PF изменяют по обычным правилам.

Команда and производит поразрядное логическое умножение операндов и записывает результат на место первого операнда. Например:

hello_html_37fff253.png

Команда test, аналог предыдущей команды, но результат логического умножения никуда не записывается, основное назначение – установка флагов, особенно флаг нуля ZF.

hello_html_37fff253.png

Команда or производит поразрядное логическое сложение операндов и записывает результат на место первого операнда. Например:

hello_html_37fff253.png

Команда xor производит поразрядное логическое сложение операндов и записывает результат на место первого операнда. Данная операция соответствует фразе «или то, или другое, но не то и не другое», т.е. если биты совпадают, записывается 0, иначе 1.

hello_html_m6819504c.png

Команды сдвига – эти команды перемещают содержимое ячейки влево или вправо. Одним из операндов этих команд является количество сдвигов cnt. Оно либо равно 1, либо определяется содержимым регистра CL (при этом CL сохраняет своё содержимое после операции).

Логические сдвиги – команды сдвига, где участвуют все биты первого операнда, при этом бит, уходящий за пределы ячейки. Заносится в флаг СА, а с другого конца в операнд добавляется ноль.

hello_html_43038756.png

hello_html_43038756.png

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

hello_html_595ec6e9.png

Примечание: команда sal при трансляции будет воспринята как shl, так кА это разные мнемонические названия одной и той машинной команды.

Циклические сдвиги. Особенность циклических сдвигов в том, что «уходящий» бит не теряется, а возвращается в операнд, но с другого конца.

hello_html_595ec6e9.png

Задание 1. Задача заключается в вычислении результата выполнения арифметического выражения, в котором некоторые числа постоянны, а другие переменные.

Формула вычислений: X=(A*2+B*C)/(D-3)

Приведенная программа сначала резервирует ячейки памяти под переменные, затем выполняет умножение однобайтовых чисел (А*2), результат умножения – двухбайтовое число в регистре АХ, сохраняется в регистре СХ, далее выполняется умножение однобайтовых чисел (B*C), результат – двухбайтовое число храниться в аккумуляторе AX. После сложения двух сомножителей и вычисления знаменателя (В-3) выполняется деление. Результат присваивается переменной X.

  1. Наберите приведенную программу 1, запишите исходный файл с расширением *.asm, получите файл с расширением *.exe.

  2. Выполните программу с 5 вариантами различных начальных значений переменных A, B, C, D по шагам (см. таблицу 1) и запишите результат выполнения в таблицу (в регистре AL – частное, AH – остаток). Переведите результат в десятичную систему.

hello_html_58f05254.png

hello_html_m59eec3e9.png

hello_html_21e92d87.png

  1. Наберите приведенную программу 2, запишите исходный файл с расширением *.asm, получите файл с расширением *.exe.

  2. Выполните программу с 5 вариантами различных начальных значений регистра al. Переведите результат и запишите таблицу 2 в двоичной и десятичной системе.

hello_html_m1cdbf205.png

hello_html_m7cda30c2.png


Контрольные вопросы:

  1. Чем отличается выполнение арифметических операций на языке ассемблера от языков высокого уровня?

  2. По какому биту регистра флагов можно установить, что предшествующее вычитание привело к отрицательному результату?

  3. По какому биту регистра флагов можно установить, что результат арифметической операции превысил разрядную сетку?

  4. В чем особенность выполнения арифметических операций с знаковыми и беззнаковыми числами?

  5. В каком регистре необходимо указывать величину сдвига в команде сдвига?









Автор
Дата добавления 04.10.2016
Раздел Информатика
Подраздел Другие методич. материалы
Просмотров70
Номер материала ДБ-236199
Получить свидетельство о публикации

Похожие материалы

Включите уведомления прямо сейчас и мы сразу сообщим Вам о важных новостях. Не волнуйтесь, мы будем отправлять только самое главное.
Специальное предложение
Вверх