Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_ПЗ111.doc
Скачиваний:
9
Добавлен:
09.09.2019
Размер:
131.58 Кб
Скачать

3.3 Алгоритм подпрограммы

Б лок схема представлена на рисунке 3.

Ввод первого и второго массива

Умножение массивов

Умножение массивов

Вывод на экран первого результирующего массива

Вывод на экран второго результирующего массива

Ввод третьего и четвертого массива

Рисунок 3 – блок – схема подпрограммы

3.4 Описание процедур

В данном варианте программы используются следующие процедуры:

– процедура ввода массива с клавиатуры;

– процедура вывода массива на экран;

– получение произведения.

Блок – схема алгоритма ввода массива с клавиатуры представлена на рисунке 4.

Загрузка адреса накопителя ввода

Чтение символов с клавиатуры

Сравнение кода введенного символа с кодом числа

да

да

да

да

да

нет

Вывод на экран введенного символа

Вывод на экран введенного символа

Завершение ввода числа

Вычитание из кода введенного символа 30h

Вычитание из кода введенного символа 30h

Запись кода введенного символа в переменную - буфера

Запись кода введенного символа в переменную - буфера

нет

нет

нет

нет

нет

да

да

Рисунок 4 – Блок – схема ввода данных

Б лок – схема вывода массива на экран представлена на рисунке 5.

Получение начало массива и его длины

В dl загружается первый байт

ASCII коррекция старшего байта

нет

да

нет

да

Увеличение si

Декрементирование счетчика цикла

Enter

Рисунок 5 – Блок – схема вывода

3.5 Текст программы

.286

len11=4d

len12=2d

len21=5d

len22=3d

Data Segment

X1 DB 4 dup(?)

X2 DB 2 dup(?)

Y1 DB 6 dup(0)

X3 DB 5 dup(?)

X4 DB 3 dup(?)

Y2 DB 8 dup(0)

Mes1 db 'first number: ', '$'

Mes2 DB 'second number : ', '$'

NextLine DB ' ',0Dh, 0Ah, '$'

mes3 db 'first pair : ', '$'

mes4 db 'second pair: ', '$'

mes5 db 'rezult :', '$'

Data EndS

Stack Segment

dw 64 dup(?)

StkTop Label Word

Stack EndS

Code Segment

Assume CS:Code,SS:Stack,ES:Data,DS:Data

inputData proc

mov bp,sp

mov cx,[bp+2]

mov si,[bp+4]

LEA DX, MES1

MOV AH, 09H

INT 21H

;-------------------ввод--переменных-------------------------------------

l:

l1: mov ah,0h

int 16h

cmp al,0

je l1

cmp al,' '

je l1

cmp al, '0'

jb l1

cmp al, '9'

jbe L_num

cmp al, 'A'

jb l1

cmp al, 'F'

jbe l_AF

jmp l1

l_num:

; ввод цифры

sub AL,30h

mov byte ptr [SI], AL

inc SI

MOV AH, 0eH

add al, 30h

INT 10H

jmp l_end

l_AF:

; ввод большой буквы из диапазона

sub al, 37h

mov byte ptr [SI], AL

inc SI

MOV AH, 0EH

add al, 37h

INT 10H

l_end:

; завершение ввода цифры

dec cx

JNZ l

ret 4

inputData endp

;-------------------вывод--переменной-------------------------------------

outputData proc

mov bp, sp

mov cx, [bp+2]

mov si, [bp+4]

l_v:

MOV DL, byte ptr[SI]

cmp dl, 9h

ja l_C

MOV AH, 06h

add dl, 30h

int 21h

jmp l_E

l_C:

MOV AH, 06h

add dl, 37h

int 21h

l_E: inc SI

dec CX

jnz l_v

lea dx, nextline

mov ah,09h

int 21h

ret 4

outputData endp

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 BX,[BP+4]

POP BP

ret 8

ProgramStart ENDP

Start:

;-------------------------------------инициализация--------------------------------------

MOV AX, Data

MOV DS, AX

MOV ES, AX

MOV AX, Stack

MOV SS, AX

MOV SP, offset StkTop

;------------------------ввод первой пары чисел--4--и--2-------------------------------

push offset x1

push len11

call inputData

lea dx, nextline

mov ah,09h

int 21h

push offset x2

push len12

call inputData

; -----------------------умножение ------------------------------------

mov dh, 4

push len12

push offset x1+type x1*3

push offset x2+type x2

push offset y1+type y1*5

call ProgramStart

lea dx, nextline

mov ah,09h

int 21h

Lea dx, mes5

mov ah, 09h

int 21h

push offset y1

mov al, len11

add al, len12

xor ah, ah

push ax

call OutputData

;------------------------ввод второ пары чисел--5--и--3--------------------------------

lea dx, nextline

mov ah,09h

int 21h

push offset x3

push len21

call inputData

lea dx, nextline

mov ah,09h

int 21h

push offset x4

push len22

call inputData

; --------------------------------умножение ---------------------------

mov dh, 5

push len22

push offset x3+type x3*4

push offset x4+type x4*2

push offset y2+type y2*7

call ProgramStart

lea dx, nextline

mov ah,09h

int 21h

Lea dx, mes5

mov ah, 09h

int 21h

push offset y2

mov al, len21

add al, len22

xor ah, ah

push ax

call OutputData

;---------------------------------------------------------------------------

mov ah,01h

int 21h

mov ax,4c00h

int 21h

Code EndS

End Start

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]