Изучение стандартных функций прерывания DOS, вывод информации на дисплей, ввод данных с клавиатуры и запись в файл

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ

КГТУ

ИРЭ

ЛАБОРАТОРНАЯ РАБОТА №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 код, обработка данных, обратное преобразование полученных данных, запись из памяти в файл, чтение из файла, вывод на экран.

Похожие материалы

Информация о работе