Федеральное агентство по образованию
РЫБИНСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ имени П. А. СОЛОВЬЁВА
Факультет радиоэлектроники и информатики
Кафедра вычислительные машины, комплексы, системы и сети
Лабораторная работа
по дисциплине
ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ
ЗАДАЧА № 12
Пояснительная записка
Студент группы ВСб-10 Бароян А.Г.
Преподаватель Ломанов А.Н
Рыбинск, 2012
Содержание
1 Постановка задачи 3
2 Разработка программы без интерфейса 4
2.1 Спецификация задачи 4
2.2 Организация данных 5
2.3 Алгоритм подпрограммы 6
2.4 Описание подпрограммы 7
2.4.1 Подпрограмма нахождения произведения 8
2.5 Текст программы 12
3 Разработка программы с интерфейсом 15
3.1 Спецификация задачи 15
3.2 Организация данных 16
3.3 Алгоритм подпрограммы 17
3.4 Описание процедур 18
3.5 Текст программы 21
4 Вывод 29
Список литературы 30
1 Постановка задачи
Написать подпрограмму для вычисления Y=X1*X2, где X1 и Х2 -десятичные ASCII-числа повышенной точности. С помощью этой подпрограммы обработать две пары чисел, в первой из которых разрядность чисел 5 и 3, а во второй — 4 и 2. Для передачи параметров использовать стек.
2 Разработка программы без интерфейса
2.1 Спецификация задачи
Входными параметрами являются четыре массива байт, содержащие значения, заданные программистом в коде программы. Разрабатываемая программа должна перемножить две пары числе, и вывести два результирующих массива.
2.2 Организация данных
Разрабатываемая программа имеет следующий набор данных:
X1 DB 5,2,3,4 -первый входной массив (Х1);
X2 DB 3,6- второй входной массив (Х2);
Y1 DB 0,0,0,0,0,0- первый выходной массив байт Y1;
X3 DB 5,2,3,4,1-третий входной массив (Х3);
X4 DB 1,8,2- четвертый входной массив (Х4);
Y2 DB 0,0,0,0,0,0,0,- второй выходной массив байт Y2.
2.3 Алгоритм подпрограммы
Алгоритм верхнего уровня (подпрограммы) изображен на рисунке 1
Рисунок 1 - Блок-схема
алгоритма подпрограммы
2.4 Описание подпрограммы
В разрабатываемой программе, в варианте без интерфейса используются одна подпрограмма.
Которая рассчитывает произведение двух пар чисел с разрядностью четыре и два, а вторая с разрядностью пять и три, тем самым получая в качестве выходного результата два массива байт с разрядностью шесть и восемь.
2.4.1 Подпрограмма нахождения произведения
Программный код подпрограммы:
ProgramStart PROC
;---------------подготовка, загрузка адресов---------------
push bp
MOV bp,sp ;привязка к верхушке стека
MOV BX,[BP+4]
MOV DI,[BP+6]
MOV SI,[BP+8]
MOV CX,[BP+10]
;---------------внешний цикл---------------------------------
m1: MOV SI, [BP+8]
PUSH CX
PUSH BX
MOV Ah,dh
mov al,ah
mov ah,0
MOV CX,AX
xor ax,ax
m2:
;---------------умножение элементов-------------------------
MOV AL, byte ptr [SI]
MUL byte ptr [DI]
AAM
;---------------сложение младших элементов-------------------------
ADC AL, byte ptr [BX]
AAA
MOV byte ptr [BX],AL
MOV AL,AH
;---------------сложение старших элементов-------------------------
clc
ADC AL,byte ptr[BX-1]
AAA
MOV byte ptr [BX-1],AL
MOV DL,byte ptr [BX-1]
DEC SI
DEC BX
DEC CX
JNZ m2
DEC DI
POP BX
DEC BX
POP CX
DEC CX
JNZ m1
;---------------вывод результата по байтно-------------------------
mov dx,0
MOV BX,[BP+4]
MOV DL,byte ptr [BX]
MOV DL,byte ptr [BX-1]
MOV DL,byte ptr [BX-2]
MOV DL,byte ptr [BX-3]
MOV DL,byte ptr [BX-4]
MOV DL,byte ptr [BX-5]
MOV DL,byte ptr [BX-6]
MOV DL,byte ptr [BX-7]
POP BP
ret 8
Блок-схема подпрограммы для нахождения произведения изображена на рисунке 2.
Обнуление регистров
Загрузка начальных адресов
Умножение элементов
Загрузка в счетчик количества элементов
обрабатываемого массива
Подготовка цикла
Нет
Декрементирование счетчика
Модификация адреса- источника
Да
Сложение младших элементов
Сложение старших элементов
Извлечение счетчика из стека
Декрементирование счетчика
Нет
Да
Вывод результата по байтно
Рисунок 2 - Подпрограмма для нахождения произведения