Скачиваний:
86
Добавлен:
11.02.2014
Размер:
134.14 Кб
Скачать

Федеральное агентство по образованию Российской Федерации

РЫБИНСКАЯ ГОСУДАРСТВЕННАЯ АВИАЦИОННАЯ ТЕХНОЛОГИЧЕСКАЯ АКАДЕМИЯ им. П.А. СОЛОВЬЕВА

Факультет заочного обучения

Кафедра вычислительных систем

КУРСОВАЯ РАБОТА

По дисциплине:

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АССЕМБЛЕРА

Вариант № 18

Исполнитель: студент группы ЗВП-07

Орлов Д.Б.

“____”__________2019 г.

Руководитель: кандидат технических

наук, профессор

Комаров В.М

“____”__________2019 г.

РЫБИНСК 2019 г.

Оглавление

  1. Условие задачи первой задачи .................................................3

  2. Граф-схема алгоритма решения первой задачи.......................4

  3. Исходный текст программы для решения первой задачи......6

  4. Условие задачи второй задачи .................................................8

  5. Граф-схема алгоритма решения второй задачи.......................9

  6. Исходный текст программы для решения второй задачи......11

  7. Вывод..........................................................................................13

Список литературы.........................................................................14

1. Условие задачи №1:

Написать подпрограмму для вычисления y = x*const, где Х – массив трехразрядных десятичных чисел в распакованном формате, const – заданное значение. С помощью этой подпрограммы обработать два массива, умножая элементы первого на число 5, а элементы второго на число 7. Для передачи параметров использовать стек.

  1. Граф-схема алгоритма решения первой задачи

.

Рисунок - основной программы

0 Верхушка стека

+2 IP

+4 кол-во чисел в массиве

+6 константа

+8 входные данные

+10 выходные данные

Рисунок - Схема размещения данных в стеке

Загрузка данных из стека

Коррекция результата

Модификация

адресов

Нет

ДА

Рисунок - Блок-схема подпрограммы MulArr

__________

|___|___|___| - трехразрядное число

___

|___| - константа

_________________________

_________

|_AH||_AL| - промежуточный результат

+ _______

|___||___|

+ _______

|___||___|

_________________________

_______________

|___||___||___||___| - результат

+3 +2 +1 +0

Рисунок - Общая схема умножения

3. Исходный текст программы для решения первой задачи

n=100

NAME Ass1

Data Segment

const1 db 5

Arr_byte1 Db 5,3,4 ;первый входной массив - 435

Db 1,2,9 ; 921

endarr_byte1 label byte

N1=(offset endArr_byte1-offset Arr_byte1)/3 ;определяем длину 1го массива

Res1 DD N1 DUP (0) ; массив результатов

Prob DB '$$$$'

const2 db 7

Arr_byte2 Db 8,8,8 ;первый входной массив - 888

Db 7,7,7 ; 777

endarr_byte2 label byte

N2=(offset endArr_byte2-offset Arr_byte2)/3 ; определяем длину 2го массива

Res2 DD N2 DUP (0) ; массив результатов

Prob1 DB '$$$$'

Data Ends

MyStack Segment

DW 12 DUP (?)

StkTop Label WORD

MyStack Ends

Code Segment

ASSUME CS:Code,DS:Data,ES:Data,SS:MyStack

MulArr Proc Near

push BP

mov BP,SP

mov CX,[bp+4] ;N из стека

mov bx,[bp+6] ;const из стека

mov di,[bp+8] ;byte из стека

mov si,[bp+10] ;res из стека

Z: mov AL,[di] ;первая цифра исходного массива

mul byte ptr [bx] ;умножение на константу

aam ;коррекция

mov [si],al ;запись рез-тата

mov [si+1],ah

mov al,[di+1] ;вторая цифра

mul byte ptr [bx] ;умножение на константу

aam ;коррекция

adc al,[si+1] ;сложение с переносом

aaa ;коррекция

mov [si+1],al ;запись рез-тата

mov [si+2],ah

mov al,[di+2] ;третья цифра

mul byte ptr [bx] ;умножение

aam ;коррекция

adc al,[si+2] ;сложение с переносом

aaa ;коррекция

mov [si+2],al ;запись рез-тата

mov [si+3],ah ;

add SI,type Res1 ;модернизация адресов

inc di

inc di

inc di

loop Z

pop BP

RET 8

MulArr Endp

Start:

mov AX, Data

mov DS, AX

mov ES, AX

mov AX, MyStack

mov SS, AX

mov SP, offset StkTop

lea AX, Res1 ;передаем данные об адресах через стек

push AX ;инициализируем их и запоминаем в стеке

lea AX, Arr_byte1

push AX

lea ax,const1

push ax

mov AX, N1

push AX

call MulArr

lea AX, Res2

push AX

lea AX, Arr_byte2

push AX

lea ax,const2

push ax

mov AX, N2

push AX

call MulArr

Code ENDS

END Start