Отчёт #3 (Примеры лаб и отчётов)
Описание файла
Файл "Отчёт #3" внутри архива находится в следующих папках: Примеры лаб и отчётов, Отчёты. PDF-файл из архива "Примеры лаб и отчётов", который расположен в категории "". Всё это находится в предмете "ассемблер" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "ассемблер" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
Ф ЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮМ ОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ(государственный технический университет)Кафедра 304(вычислительные машины, системы и сети)Лабораторная работа по курсу«Ассемблер»Отчёт по работе№3 .Блочная структура программы(наименование работы)и линейное программирование на языке AssemblerВариант задания№2 .Лабораторную работу выполнили:студенты гр. 13-501, Резвяков Денис, Коршунов Евгений(должность).(Ф. И. О.)Лабораторную работу принял:зам. декана фак.
№3, Алещенко Алла Степановна(должность)(Ф. И. О.)« 10 ».(подпись)ноября(дата приёма)2009 г.Цель работы: Освоить программирование блочной структурыпрограммы на Ассемблере. Освоить сборку исходного кодав исполняемый файл, используя программный пакет TASM.Задание1. Ознакомиться с образцами программ.2. Разработать программу на Ассемблере для реализациилинейного процесса, аналогичного в лабораторной работе №1.Расчётная формула: c×d+(a mod b)+(a2-7).Аргументы: a = 29, b = 18, c = 31, d = -14.Код программы реализации линейного процесса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, bxcall outtxtcall calccall outintretstart endp–2–; Процедура вывода текста "Result: ".
Процедура ломает AH, DX.outtxt proc nearlea dx, str_result ; Эквивалент - "mov dx, offset str_result"mov ah, 9int 21hretouttxt endp;; Процедура вычисления формулы: c*d + (a mod b) + (a^2 - 7).; Процедура ломает AX, CX, DX.calc proc nearmov ax, value_c ; Заносим значение C в регистр AXimul value_d; Умножаем AX на значение Dmov cx, ax; Копируем результат в регистр CXmov ax, value_acwdidiv value_badd cx, dx;;;;Заносим значение A в регистр AXРасширяем значение AX до (DX,AX)Делим (DX,AX) на значение BПрибавляем остаток от деления к сумме в CXmov ax, value_a ; Заносим значение A в регистр AXimul ax; Умножаем AX само на себяsub ax, 7; Вычитаем из результата (AX) число 7add ax, cx; Складываем CX и AX, результат заносим в AXretcalc endp;; Процедура вывода числа, хранящегося в 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 ; ...если результат не нуль, то продолжаем делитьoi_nxt:oi_put:oi_out:outintmovcmpjemovintpopcmpjneretendpah, 6bl, 0oi_putdx, '-'21hdxdx, 0oi_nxt;;;;;;;;Заносим код 6 для команды вывода символа на экранСравниваем признак отрицательного числа с нулём...если признака нет, то переходим к выводу числаПомещаем код символа минус в регистрВызываем обработку команды 6 - вывода символаВытаскиваем очередной код символа из стекаСравниваем символ с признаком конца строки - с нулём...если символ не нулевой, то продолжаем циклcseg endsend startРезультат работы программыResult: 411–3–.