STACKSG SEGMENT PARA STACK 'Stack'
DW 80 DUP(?)
STACKSG ENDS
;----------------------------------------------------------------------------
DATASG SEGMENT PARA 'Data'
HANDLE DW 0
MIN DW 0fff0H ;минимальный элемент
MAX DW 0
SREDN DW 0
TEN DB 10
IN_FNAME DB "IN.DAT",0 ;имя входного файла
OUT_FNAME DB "OUT.DAT",0 ;имя выходного файла
NUMROWS DW 1 ;количество строк
NUMCOLS DW 1 ;количество столбцов
ROW DW 0
TMP DW ? ;temporary cell
BUFFER DB 64 DUP(5) ;буфер ввода
stringlen DB?
STRING DB 4 DUP(?) ;temporary string
DATASG ENDS
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX
CALL LOAD_FROM_FILE ;вызов
CALL CALCULATE ;пользовательских
CALL SAVE_TO_FILE ;процедур
RET
BEGIN ENDP
LOAD_FROM_FILE PROC NEAR
MOV AH,03Dh ;
MOV AL,0C2h ; открытие файла
MOV DX,OFFSET IN_FNAME;‑
INT 21h
MOV HANDLE,AX
mov BX,0
push BX
@Cicle1:
MOV BX,HANDLE
MOV AH,03Fh ;
MOV CX,1 ; считываем 1 байт в буфер
|
|
MOV DX,OFFSET NUMROWS;‑
INT 21h
cmp NUMROWS,32; Space
jz @EndCicle1
sub NUMROWS,48
pop BX
mov AX,BX
mul TEN
add AX,NUMROWS
mov BX,AX
push BX
jmp @Cicle1
@EndCicle1:
pop BX
mov NUMROWS,BX
mov BX,0
push BX
@Cicle2:
MOV BX,HANDLE
MOV AH,03Fh ;
MOV CX,1 ; считываем 1 байт в буфер
MOV DX,OFFSET NUMCOLS;‑
INT 21h
cmp NUMCOLS,32; Space
jz @EndCicle2
sub NUMCOLS,48
pop BX
mov AX,BX
mul TEN
add AX,NUMCOLS
mov BX,AX
push BX
jmp @Cicle2
@EndCicle2:
pop BX
mov NUMCOLS,BX
mov BX,0
push BX
@Cicle3:
MOV BX,HANDLE
MOV AH,03Fh ;
MOV CX,1 ; считываем 1 байт в буфер
MOV DX,OFFSET ROW;‑
INT 21h
cmp ROW,32; Space
jz @EndCicle3
sub ROW,48
pop BX
mov AX,BX
mul TEN
add AX,ROW
mov BX,AX
push BX
jmp @Cicle3
@EndCicle3:
pop BX
mov ROW,BX
MOV AX,NUMROWS
MOV CX,NUMCOLS
MUL CX ; AX = NUMROWS * NUMCOLS
mov CX,AX
mov SI,0
@GlobalCicle:
push CX
mov BX,0
push BX
@Cicle4:
MOV BX,HANDLE
MOV AH,03Fh ;
MOV CX,1 ; считываем 1 байт в буфер
MOV DX,OFFSET TMP;‑
INT 21h
cmp TMP,32; Space
jz @EndCicle4
sub TMP,48
pop BX
mov AX,BX
mul TEN
add AX,TMP
mov BX,AX
push BX
jmp @Cicle4
@EndCicle4:
|
|
pop BX
mov buffer[SI],BL
inc SI
pop CX
loop @GlobalCicle
MOV Ah,3Eh
MOV BX,HANDLE
INT 21H
RET
LOAD_FROM_FILE ENDP
CALCULATE PROC NEAR
MOV BX, OFFSET BUFFER
MOV AX, ROW
MOV CX,NUMCOLS
MUL CX
MOV SI,AX
MOV CX, NUMCOLS
mov DX,SI
mov al,[bx+si]
xor ah,ah
mov min,ax
mov max,ax
mov sredn,ax
dec cx
inc si
jcxz @endcycle
@CYCLE1:
MOV Al, [BX+SI]
xor ah,ah
CMP AX,MIN
JA @NEXT1
MOV MIN, AX
@NEXT1:
inc SI
LOOP @CYCLE1
MOV CX, NUMCOLS
MOV SI,DX
@CYCLE2:
MOV Al, [BX+SI]
xor ah,ah
CMP AX,MAX
JB @NEXT2
MOV MAX, AX
@NEXT2:
inc SI
LOOP @CYCLE2
MOV AX,MIN
ADD AX,MAX
SHR AX,1
MOV SREDN,AX
@ENDCYCLE:
RET
CALCULATE ENDP
SAVE_TO_FILE PROC NEAR
MOV AH,03Ch ;
MOV CX,0 ; открытие файла
MOV DX,OFFSET OUT_FNAME;‑
INT 21h
MOV HANDLE,AX
mov AX,min
push AX
mov stringlen,0
@2Cicle1:
pop AX
xor ah,ah
or AL,AL
jz @2EndCicle1
mov BX,AX
div TEN
push AX
mul TEN
sub BX,AX
add BX,48; '0'
mov CL,stringlen
or CL,CL
jz @end_disl1
xor CH,CH
mov SI,CX
@dislocation1:
mov AL, string[SI-1]
mov string[SI], AL
dec SI
loop @dislocation1
@end_disl1:
inc stringlen
mov String[0],BL
jmp @2Cicle1
@2EndCicle1:
MOV BX,HANDLE ;
MOV AH,040h ;¦
MOV CL,stringlen ; сохранение MIN
xor ch,ch
MOV DX,OFFSET string ;‑
INT 21h
mov MIN,32; Space
MOV BX,HANDLE
MOV AH,040h
MOV CX,1
MOV DX,OFFSET MIN
INT 21h
mov AX,max
push AX
mov stringlen,0
@2Cicle2:
pop AX
xor ah,ah
or AL,AL
jz @2EndCicle2
mov BX,AX
div TEN
push AX
mul TEN
sub BX,AX
add BX,48; '0'
mov CL,stringlen
or CL,CL
jz @end_disl2
xor CH,CH
mov SI,CX
@dislocation2:
mov AL, string[SI-1]
mov string[SI], AL
dec SI
loop @dislocation2
@end_disl2:
inc stringlen
mov String[0],BL
jmp @2Cicle2
@2EndCicle2:
MOV BX,HANDLE ;
MOV AH,040h ;¦
MOV CL,stringlen ; сохранение MAX
xor ch,ch
MOV DX,OFFSET string ;‑
INT 21h
mov MIN,32; Space
MOV BX,HANDLE
MOV AH,040h
MOV CX,1
MOV DX,OFFSET MIN
INT 21h
mov AX,sredn
push AX
mov stringlen,0
@2Cicle3:
pop AX
xor ah,ah
or AL,AL
jz @2EndCicle3
mov BX,AX
div TEN
push AX
mul TEN
sub BX,AX
add BX,48; '0'
mov CL,stringlen
or CL,CL
jz @end_disl3
xor CH,CH
mov SI,CX
@dislocation3:
mov AL, string[SI-1]
mov string[SI], AL
dec SI
loop @dislocation3
@end_disl3:
inc stringlen
mov String[0],BL
jmp @2Cicle3
@2EndCicle3:
MOV BX,HANDLE ;
MOV AH,040h ;¦
MOV CL,stringlen ; сохранение SREDN
xor ch,ch
MOV DX,OFFSET string ;‑
INT 21h
mov MIN,32; Space
MOV BX,HANDLE
MOV AH,040h
MOV CX,1
MOV DX,OFFSET MIN
INT 21h
MOV Ah,3Eh
MOV BX,HANDLE
INT 21H
RET
SAVE_TO_FILE ENDP
CODESG ENDS
END BEGIN