 
        
        Федеральное агентство по образованию
РЫБИНСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ имени П. А. СОЛОВЬЁВА
Факультет радиоэлектроники и информатики
Кафедра вычислительные машины, комплексы, системы и сети
Лабораторная работа
по дисциплине
ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ
ЗАДАЧА № 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 - Подпрограмма для нахождения произведения
