Отчёт 1 (Лабораторная работа №1)
Описание файла
Файл "Отчёт 1" внутри архива находится в папке "Лабораторная работа №1". PDF-файл из архива "Лабораторная работа №1", который расположен в категории "". Всё это находится в предмете "ассемблер" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "ассемблер" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
Ф ЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮМ ОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ(государственный технический университет)Кафедра 304(вычислительные машины, системы и сети)Лабораторная работа по курсу«Ассемблер»Отчёт по работе№1 .Реализации линейного процесса(наименование работы)на языке программирования AssemblerВариант задания№2 .Лабораторную работу выполнили:студенты гр.
13-501, Резвяков Денис, Коршунов Евгений(должность).(Ф. И. О.)Лабораторную работу принял:зам. декана фак. №3, Алещенко Алла Степановна(должность)(Ф. И. О.)« 10 ».(подпись)ноября(дата приёма)2009 г.Цель работы: Освоить программирование линейных участковпрограмм с использованием арифметических команд языкаАссемблера.Задание1.
Разобрать раздел справочно-обучающей системы ASMLдесятичной коррекции чисел при вычитании. Особое вниманиеуделить числовым примерам. Законспектировать этот раздел.2. Разработать программу на Турбо-Паскале для реализациилинейного процесса, содержащую также вычисление эталонногорезультата.Расчётная формула: c×d+(a mod b)+(a2-7).Аргументы: a = 29, b = 18, c = 31, d = -14.Десятичная коррекция чисел при вычитанииВ BCD-формате каждый байт содержит две десятичныецифры (по одной в каждой тетраде). Максимальное значениететрады равно 9, максимальное значение байтового числа — 99.Многоразрядные числа представляются последовательностьюбайт. Например, число 0011.0100 в двоичном формате равнодесятичному числу 52, а тоже число в BCD-формате равнодесятичному числу 34.Вычитание чисел производится в два этапа: сначала байтывычитаются как обычные двоичные числа, а затем результаткорректируется командой DAS по следующим правилам:1) Если AF = 1 или младшая тетрада AL больше девяти,то из содержимого AX вычитается 6 и AF устанавливается в 1.–2–2) Если CF = 1 или старшая тетрада AH больше девяти,то из содержимого AX вычитается 60h и CF устанавливается в 1.После коррекции в регистре AX остается упакованноедесятичное число в диапазоне от 0 до 99.Команда DAS имеет длину 1 байт и выполняетсяза 4 машинных такта.Устанавливаются все арифметические флажки в зависимости от полученного результата, за исключением OF и AF,состояние которых после коррекции не определено.
CF интерпретируется как флажок заёма, он равен 1, если вычитаемоебольше уменьшаемого.Вычитание BCD-чисел с повышенной точностьюаналогично двоичному вычитанию с повышенной точностью.Но после каждого байтового вычитания необходимопроизводить десятичную коррекцию.Пример вычитания BCD-словВычтем: 0000.0011.0000.0111(307)–0000.0010.0000.1000(208).1. Вычитание младших байт командой SUB.0000.0111 – 0000.1000 = 1111.1111.
Произошло два заёма,поэтому флажки AF и CF устанавливаются в состояние 1.2. Десятичная коррекция промежуточного результата:AF = 1 или младшая тетрада > 9, значит из младшей тетрадывычитается шестёрка (0110). CF = 1 или старшая тетрада > 9,значит и из старшей тетрады вычитается 6 (0110), а флажок CFостается в состоянии 1. Результат после коррекции:1111.1111 – 0000.0110 – 0110.0000 = 1001.1001.–3–3.
Вычитание старшего байта числа командой SBB:0000.0011 – 0000.0010 – 1 (заём) = 0000.0000. AF = CF = 0.4. Десятичная коррекция вычитания старших байт неизменяет промежуточного результата, т.к. значения тетраддопустимые и флажки CF и AF равны 0.Окончательный результат равен десятичному числу 99.Код программы реализации линейного процессаprogram Laba1;vara, b, c, d, r1, r2: integer;begina := 29;b := 18;c := 31;d := -14;asmmov AX, c {помещаем значение C в регистр AX}imul d{умножаем C (в AX) на D}mov r2, AX {копируем результат из AX в переменную r2}mov AX, acwdidiv badd r2, DXmovimulsubaddend;AX, aAXAX, 7r2, AX{копируем значение A в регистр AX}{расширяем значение в AX до (DX:AX), до двойного слова}{делим (DX:AX) на значение B}{добавляем остаток от деления (из DX) в переменную r2}{копируем значение A в регистр AX}{умножаем A (в AX) само на себя}{вычитаем из произведения 7}{добавляем разность (из AX) в переменную r2}r1 := c*d + (a mod b) + (a*a - 7);WriteLn('Result by Pascal: ', r1:4);WriteLn('Result by Assembler: ', r2:4);ReadLn;end.Результат работы программыResult by Pascal: 411Result by Assembler: 411–4–.