Отчёт 3 (Лабораторная работа №3)
Описание файла
Файл "Отчёт 3" внутри архива находится в папке "Лабораторная работа №3". PDF-файл из архива "Лабораторная работа №3", который расположен в категории "". Всё это находится в предмете "ассемблер" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "ассемблер" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
Ф ЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮМ ОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ(государственный технический университет)Кафедра 304(вычислительные машины, системы и сети)Лабораторная работа по курсу«Ассемблер»Отчёт по работе№3 .Блочная структура программы(наименование работы)и линейное программирование на языке AssemblerВариант задания№2 .Лабораторную работу выполнили:студенты гр.
13-501, Резвяков Денис Михайлович,(должность)(Ф. И. О.)Коршунов Евгений Владимирович.Лабораторную работу принял:доцент каф. 304, к.т.н. Алещенко Алла Степановна(должность)(Ф. И. О.)« 1 ».(подпись)декабря(дата приёма)2009 г.Цель работы: Освоить программирование блочной структурыпрограммы на Ассемблере. Освоить сборку исходного кодав исполняемый файл, используя программный пакет TASM.Задание1.
Ознакомиться с образцами программ.2. Разработать программу на Ассемблере для реализациилинейного процесса, аналогичного в лабораторной работе №1.Расчётная формула: c×d+(a mod b)+(a2-7).Аргументы: a = 29, b = 18, c = 31, d = -14.–2–Блок-схемаБлок-схема процедуры вывода целого числа в консоль:–3–Код программы реализации линейного процессаsseg segment stackdb 64 dup (?)sseg ends;dseg segmentstr_result db "Result: $"value_a dw 29value_b dw 18value_c dw 31value_d dw -14dseg ends;cseg segmentassume cs:cseg, ds:dseg, ss:sseg;start proc farpush dspush axmov bx, dsegmov ds, bxstartouttxtouttxtcalccall outtxtcall calccall outintretendp; Процедура вывода текста "Result: ".
Процедура ломает AH, DX.proc nearlea dx, str_result ; Эквивалент - "mov dx, offset str_result"mov ah, 9int 21hretendp;; Процедура вычисления формулы: c*d + (a mod b) + (a^2 - 7).; Процедура ломает AX, CX, DX.proc nearmov ax, value_c ; Заносим значение C в регистр AXimul value_d; Умножаем AX на значение Dmov cx, ax; Копируем результат в регистр CXmov ax, value_acwdidiv value_badd cx, dxmovimulsubaddretcalc endp;;;;Заносим значение A в регистр AXРасширяем значение AX до (DX,AX)Делим (DX,AX) на значение BПрибавляем остаток от деления к сумме в CXax, value_a ; Заносим значение A в регистр AXax; Умножаем AX само на себяax, 7; Вычитаем из результата (AX) число 7ax, cx; Складываем CX и AX, результат заносим в AX–4–; Процедура вывода числа, хранящегося в AX.; Процедура ломает AX, BX, CX, DX.outint proc nearxor bx, bx ; Обнуляем BX - это будет признак отрицательного числаmov cx, 10 ; В CX заносим число 10 - основание десятичной системыpush bx; Заносим нуль в стек - это признак конца строкиcmp ax, 0; Сравниваем выводимое число с нулёмjnl oi_get ; ...если не отрицательное, то переходим к вычислениямinc bl; Устанавливаем признак отрицательного числаneg ax; Само число делаем положительнымoi_get: xor dx, dx ; Обнуляем регистр DX перед делением, т.к.
AX >= 0idiv cx; Делим (DX,AX) на CX, т.е. на 10ordl, 30h ; Преобразуем цифру в код символа, добавляя код 30hpush dx; Заносим очередной символ в стекcmp ax, 0; Сравниваем результат деления с нулёмjne oi_get ; ...если результат не нуль, то продолжаем делитьmovcmpjemovoi_nxt: intoi_put: popcmpjneretoutint endpah, 6bl, 0oi_putdx, '-'21hdxdx, 0oi_nxt;;;;;;;;Заносим код 6 для команды вывода символа на экранСравниваем признак отрицательного числа с нулём...если признака нет, то переходим к выводу числаПомещаем код символа минус в регистрВызываем обработку команды 6 - вывода символаВытаскиваем очередной код символа из стекаСравниваем символ с признаком конца строки - с нулём...если символ не нулевой, то продолжаем циклcseg endsend startРезультат работы программыResult: 411–5–.