[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

Объяснение кода листинга программы

  1. mov ax,4202h — Команда переносит значение 4202 в регистр AX. Это число используется в качестве кода функции в следующем вызове функции.
  2. xor cx,cx — Команда устанавливает регистр CX в 0. Этот регистр используется в качестве счётчика для цикла.
  3. xor dx,dx — Команда устанавливает регистр DX в 0. Этот регистр используется в качестве счётчика для второго цикла.
  4. int 21h — Команда вызывает функцию 21h, которая предназначена для выполнения операций ввода/вывода. Эта функция используется для чтения файла.
  5. mov FileSize,ax — Команда переносит значение из регистра AX в переменную FileSize. Это значение представляет собой размер файла, который был прочитан функцией 21h.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы