[TASM] Чтение двумерного массива из файла - Assembler
Формулировка задачи:
Например имеется файл, в котором в первой строке через пробел записаны число строк массива и число столбцов. Со следующей строки начинается сам массив (значения также записаны через пробел).
Например так:
3 3
5 6 7
3 4 9
1 2 8
Собственно вопрос: как считать данные из файла в переменные. сам массив в буфер? При чтении файла с помощью 3Fh мне нужно знать размер файла. Я в cx записываю кол-во байт, которые нужно считать, а затем сравниваю число считанных байтов в ax, которые вернула функция 3Fh, и если в ax значение будет меньше чем в cx, то значит что мы прочитали файл целиком.
Подскажите правильно ли я все делаю?
.286
.model small
.stack 100h
.data
Handle dw ?
Rows dw ?
Columns dw ?
Array dw ?
buff db 40 dup (?)
FileName db 'myMass.txt',0h
.code
OpenFileRead PROC
MOV AH,3Dh
MOV AL,2
INT 21h
RET
OpenFileRead ENDP
CloseFile PROC
MOV AH,3Eh
INT 21h
RET
CloseFile ENDP
Show PROC
mov ah,02h
int 21h
ret
Show ENDP
start:
mov ax,@data
mov ds,ax
mov dx,offset FileName
call OpenFileRead
@L1:
mov bx,ax ;дескриптор в bx
mov ah,3fh
mov cx,9h
mov dx,offset buff
int 21h
cmp ax,cx
je @L1
call CloseFile
mov ah,09
lea dx,buff
int 21h
mov ah,4Ch
int 21h
end startРешение задачи: «[TASM] Чтение двумерного массива из файла»
textual
Листинг программы
mov ax,4202h ;узнаем размер файла xor cx,cx xor dx,dx int 21h mov FileSize,ax
Объяснение кода листинга программы
- mov ax,4202h — Команда переносит значение 4202 в регистр AX. Это число используется в качестве кода функции в следующем вызове функции.
- xor cx,cx — Команда устанавливает регистр CX в 0. Этот регистр используется в качестве счётчика для цикла.
- xor dx,dx — Команда устанавливает регистр DX в 0. Этот регистр используется в качестве счётчика для второго цикла.
- int 21h — Команда вызывает функцию 21h, которая предназначена для выполнения операций ввода/вывода. Эта функция используется для чтения файла.
- mov FileSize,ax — Команда переносит значение из регистра AX в переменную FileSize. Это значение представляет собой размер файла, который был прочитан функцией 21h.