Открыть файл, считать строку из 10 символов и вывести ее. Почему не работает мой код? - Assembler/TASM

Узнай цену своей работы

Формулировка задачи:

model small
.stack 254
 
.data
fname db 'stroka1.txt',0h   
des dw 0
buff db 20 dup (?)
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
 
        mov ah,3dh ;открываем файл
    mov al,0
    mov dx,offset fname
    int 21h
    mov bx,ax
    
        mov ah,3fh ;читаем 10 символов
    mov dx, offset buff
    mov cx,10
    int 21h
 
        lea dx,buff ;выводим
        mov ah,9
        int 21h
 
xor ah,ah
int 16h
mov ax, 4c00h   ; Завершение программы
int 21h    
end start
У меня выводит много каких-то непонятных символов. В файле txt просто символы 35safqeeh4dgqgwdggq

Решение задачи: «Открыть файл, считать строку из 10 символов и вывести ее. Почему не работает мой код?»

textual
Листинг программы
model small
.stack 254
 
.data
fname db 'stroka1.txt',0h   
des dw 0
buff db 20 dup ('$')
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
 
        mov ah,3dh ;открываем файл
    mov al,0
    mov dx,offset fname
    int 21h
    mov bx,ax
    
        mov ah,3fh ;читаем 10 символов
    mov dx, offset buff
    mov cx,10
    int 21h
 
        lea dx,buff ;выводим
        mov ah,9
        int 21h
 
xor ah,ah
int 16h
mov ax, 4c00h   ; Завершение программы
int 21h    
end start

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

Ваш код пытается открыть файл, прочитать из него 10 символов и затем выводит их. Однако, есть несколько потенциальных проблем:

  1. Вы используете регистр BX для хранения результата функции int 21h при открытии файла, но затем используете его как регистр CX для чтения файла. Возможно, вы должны использовать другой регистр для хранения количества прочитанных байт.
  2. Вы не проверяете, успешно ли открывается файл или считываются ли из него данные. Если файл не существует или не может быть открыт, то функция int 21h вернет значение, которое вы не проверяете.
  3. Ваш буфер для чтения данных имеет размер в 20 символов, но вы пытаетесь прочитать из него 10 символов. Если данные в файле занимают меньше 10 символов, то оставшиеся символы в буфере будут заполнены символом '$', что может привести к неправильному выводу данных.
  4. Ваш код не обрабатывает ситуацию, когда файл пуст. Если в файле нет данных для чтения, функция int 21h все равно будет читать 10 символов, что может привести к неправильному выводу данных.
  5. Вы не закрываете файл после чтения данных. Это может привести к утечке ресурсов.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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