МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ
КГТУ
ИРЭ
ЛАБОРАТОРНАЯ РАБОТА №2
«ИЗУЧЕНИЕ СТАНДАРТНЫХ ФУНКЦИЙ ПРЕРЫВАНИЯ DOS»
Выполнил: ст-т гр. Р41-1
БашкатовЕ. С.
Проверил: ВалихановМ. М.
Красноярск 2004
Цель работы: знакомство со стандартными функциями прерываний DOS, вывод информации на дисплей, ввод данных с клавиатуры и запись в файл. Написать программу, которая формирует массив из 10 двухбайтных чисел. Найти в этом массиве числа, у которых 2, 5, и 12 разряды равны «1».
STACKSG SEGMENT PARA USE16
A DW 25 dup (?)
B DW 10 dup (?)
C DW 10 dup (0)
D DW 25 dup (0)
ENDSTR DB 0AH,0DH,24H
TIT DB 20H,20H,20H,20H,'***LABORATORNAYA RABOTA #2, VARIANT #1***',0AH,0DH,24H
ZADANIE DB 'VVESTI MASSIV IZ 10 CHISEL. NAYTI CHISLA, U KOTORYIH 2, 5 I 12 RAZRYADYI RAVNYI 1. (ISPOL`ZOVAT` VVOD S KLAVIATURYI, VYIVOD NA YEKRAN, CHTENIE-ZAPIS` FAYLOV).',0AH,0DH,24H
MSG1 DB 'VVEDITE 10 HEX CHISEL:',0AH,0DH,24H
MSG2 DB 'RESULTAT POISKA:',0AH,0DH,24H
NUM DW ?
MULT DB 4H
ZAP DB 2CH
RESFILE DB 'RESULT.TXT',0
HANDLE2 DW ?
RESULT DW 25 DUP (2020H),24H
STACKSG ENDS
CODESG SEGMENT PARA'CODE'
BEGIN PROC FAR
;***START PROGRAM***
ASSUME DS:STACKSG,CS:CODESG
MOV AX,STACKSG
MOV DS,AX
;***WELLCOME***
MOV AH,09H
MOV DX,OFFSET TIT
INT 21H
MOV DX,OFFSET ZADANIE
INT 21H
MOV DX,OFFSET MSG1
INT 21H
;***INPUT DATA FORM KBD***
LEA SI,A
MOV CX,0AH
INP: MOV AH,01H
INT 21H
MOV [SI],AL
INT 21H
MOV [SI+1],AL
INT 21H
MOV [SI+2],AL
INT 21H
MOV [SI+3],AL
MOV [SI+4],2CH
ADD SI,5H
MOV AH,09H
LEA DX,ENDSTR
INT 21H
ADD NUM,5H
LOOP INP
;***DIRECT TRANSFORM DATA***
LEA SI,A
LEA DI,B
SUB NUM,1
MOV CX,NUM
JMP NO1
ZPT: ADD SI,1
DEC CX
NO1: MOV AL,[SI]
CMP AL,ZAP
JE ZPT
CMP AL,40H
JB NO2
SUB AL,37H
JMP NO3
NO2: SUB AL,30H
NO3: SHL AL,4H
MOV DH,AL
ADD SI,1H
DEC CX
MOV AL,[SI]
CMP AL,40H
JB NO4
SUB AL,37H
JMP NO5
NO4: SUB AL,30H
NO5: ADD DH,AL
ADD SI,1H
DEC CX
MOV AL,[SI]
CMP AL,40H
JB NO6
SUB AL,37H
JMP NO7
NO6: SUB AL,30H
NO7: SHL AL,4H
MOV DL,AL
ADD SI,1H
DEC CX
MOV AL,[SI]
CMP AL,40H
JB NO8
SUB AL,37H
JMP NO9
NO8: SUB AL,30H
NO9: ADD DL,AL
ADD SI,1H
MOV [DI],DX
ADD DI,2H
LOOP NO1
;---OLD PROGRAM---
LEA SI,B
LEA DI,C
MOV CX,0AH;
MOV NUM,0
NO10: MOV AX,[SI]
AND AX,0812H
SUB AX,0812H
JNZ NO11
MOV AX,[SI]
MOV [DI],AX
ADD NUM,1
ADD DI,2
NO11: ADD SI,2
LOOP NO10
;---END OLD PROGRAM---
;***BACK TRANSFORM DATA***
LEA SI,C
LEA DI,D
MOV CX,NUM
NO12: MOV AL,[SI]+1
SHR AL,4H
CMP AL,0AH
JB NO13
ADD AL,37H
JMP NO14
NO13: ADD AL,30H
NO14: MOV [DI],AL
ADD DI,1H
MOV AL,[SI]+1
SHL AL,4H
SHR AL,4H
CMP AL,0AH
JB NO15
ADD AL,37H
JMP NO16
NO15: ADD AL,30H
NO16: MOV [DI],AL
ADD DI,1H
NO17: MOV AL,[SI]
SHR AL,4H
CMP AL,0AH
JB NO18
ADD AL,37H
JMP NO19
NO18: ADD AL,30H
NO19: MOV [DI],AL
ADD DI,1H
MOV AL,[SI]
SHL AL,4H
SHR AL,4H
CMP AL,0AH
JB NO20
ADD AL,37H
JMP NO21
NO20: ADD AL,30H
NO21: MOV [DI],AL
ADD DI,1H
ADD SI,2H
LOOP NO12
MOV [DI],BYTE PTR 24H
MOV AX,NUM
MUL MULT
MOV NUM, AX
;***CREATE FILE***
MOV AH,3CH
MOV CX,0
MOV DX,OFFSET RESFILE
INT 21H
MOV HANDLE2,AX
;***WRITE DATA IN FILE 'RESULT.TXT'***
MOV AH,40H
MOV BX,HANDLE2
MOV CX,NUM
MOV DX,OFFSET D
INT 21H
MOV CX,AX
;***CLOSE FILE***
MOV AH,3EH
MOV BX,HANDLE2
INT 21H
;***OPEN FILE***
MOV AH,3DH
MOV AL,2
MOV DX,OFFSET RESFILE
INT 21H
MOV HANDLE2,AX
;***READ DATA FROM FILE***
MOV AH,3FH
MOV BX,HANDLE2
MOV DX,OFFSET RESULT
INT 21H
MOV CX,AX
;***CLOSE FILE***
MOV AH,3EH
MOV BX,HANDLE2
INT 21H
;***PRINT SCREEN***
MOV AH,09H
MOV DX,OFFSET MSG2
INT 21H
MOV DX,OFFSET ENDSTR
INT 21H
MOV DX,OFFSET RESULT
INT 21H
;***END PROGRAM***
MOV AX,4C00H
INT 21H
BEGIN ENDP
CODESG ENDS
END BEGIN
Вывод: в результате выполнения лабораторной работы я написал программу на языке программирования Assembler. Изучил стандартные функции прерывания DOS: освоил запись-чтение файла, ввод с клавиатуры, вывод информации на экран. Программа работает следующим образом: ввод информации с клавиатуры, запись в память, преобразование в ASCII код, обработка данных, обратное преобразование полученных данных, запись из памяти в файл, чтение из файла, вывод на экран.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.