2.5 Текст программы
.286
Data Segment
X1 DB 5,2,3,4
X2 DB 3,6
Y1 DB 0,0,0,0,0,0
X3 DB 5,2,3,4,1
X4 DB 1,8,2
Y2 DB 0,0,0,0,0,0,0,
Data EndS
Stack Segment
dw 64 dup(?)
StkTop Label Word
Stack EndS
Code Segment
Assume CS:Code,SS:Stack,ES:Data,DS:Data
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
ProgramStart ENDP
Start:
;инициализация
MOV AX, Data
MOV DS, AX
MOV ES, AX
MOV AX, Stack
MOV SS, AX
MOV SP, offset StkTop
xor AX,AX
MOV CX, 2
MOV DH, 4
PUSH CX
PUSH offset X1+ type X1*3
PUSH offset X2+ type X2
PUSH offset Y1+ type Y1*5
Call ProgramStart
xor AX,AX
MOV CX, 3
MOV DH, 5
PUSH CX
PUSH offset X3+ type X3*4
PUSH offset X4+ type X4*2
PUSH offset Y2+ type Y2*8
Call ProgramStart
Code EndS
End Start
3 Разработка программы с интерфейсом
3.1 Спецификация задачи
Входными параметрами являются четыре массива байт, содержащие значения, заданные программистом в коде программы. Разрабатываемая программа должна перемножить две пары числе, и вывести два результирующих массива.
Кроме того добавятся специальные интерфейсные переменные и переменная - клавиатурный буфер. Основные расчетные действия программы с интерфейсом в точности такие же, как и в варианте без интерфейса. В этом и последующих разделах будут рассматриваться только добавленные участки кода, а также те, в которые были внесены изменения.
Для реализации программы с интерфейсом необходимо организовать следующие механизмы:
очищать экран;
задать позиции курсора;
выполнять проверку каждого введенного символа;
выполнять корректирующее сложение;
сравнивать максимальное количество элементов с максимально допустимым;
разделять пробелом элементы при вводе;
корректировать слово при неполном вводе;
копировать данные из переменной-буфера в подпрограмму для расчета произведения;
очищать переменную-накопитель после каждого обработанного массива;
выводить результаты расчета на экран.
3.2 Организация данных
Описание переменных, относящихся к реализации интерфейса:
Mes1 db 'vvedite number: ', '$' – переменная-сообщение «введите число», которая выводится в начале работы программы;
NextLine DB ' ',0Dh, 0Ah, '$'– переменная – переход на следующую строку
mes5 db 'rezult :', '$'– переменная-сообщение «результат», которая выводит результат обработки программы;
len11-переменная -константа которая содержит разрядность первого числа 4d;
len12-переменная -константа которая содержит разрядность второго числа 2d;
len21-переменная -константа которая содержит разрядность третьего числа 5d;
len22-переменная -константа которая содержит разрядность четвертого числа 3d;