Практическая работа №1. Разработка линейных программ с использованием арифметических выражений
Разработка линейных программ с Цель: Научиться разрабатывать линейные программы с использованием арифметических выражений. Программное обеспечение: TASM, FAR Оборудование: персональный компьютер, практикум, тетради для лабораторных работ. Правила по технике безопасности: общие (приложение). Литература: Магда Ю. Ассемблер для процессоров Intel Pentium. Голубь Н. Г. Искусство программирования на Ассемблере. Лекции и упражнения. Время выполнения: 2 часа. ВОПРОСЫ ВХОДНОГО КОНТРОЛЯ: 1. Перечислите арифметические операции. 2. Перечислите регистры процессора. Над двоичными числами со знаком и без знака могут быть выполнены следующие действия: сложение, вычитание, умножение и деление. Сложение двоичных чисел В системе команд микропроцессора имеются три команды двоичного сложения: 1. Операция инкремента: inc операнд Означает увеличение значения операнда на 1. 2. Команда сложения: add операнд_1, операнд_2 Принцип ее действия: операнд_1 = операнд_1 + операнд_2 3. Команда сложения с учетом флага переноса cf: adc операнд_1, операнд_2 Принцип действия команды: операнд_1 = операнд_1 + операнд_2 + значение_ cf Последняя команда сложения учитывает перенос единицы из старшего разряда. Когда в старшем разряде появляется единица, она переносится в бит 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 делитель Для этой команды справедливы все рассмотренные положения, касающиеся команд и чисел со знаком.
|