Открыть файл, считать строку из 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Решение задачи: «Открыть файл, считать строку из 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 символов и затем выводит их. Однако, есть несколько потенциальных проблем:
- Вы используете регистр BX для хранения результата функции int 21h при открытии файла, но затем используете его как регистр CX для чтения файла. Возможно, вы должны использовать другой регистр для хранения количества прочитанных байт.
- Вы не проверяете, успешно ли открывается файл или считываются ли из него данные. Если файл не существует или не может быть открыт, то функция int 21h вернет значение, которое вы не проверяете.
- Ваш буфер для чтения данных имеет размер в 20 символов, но вы пытаетесь прочитать из него 10 символов. Если данные в файле занимают меньше 10 символов, то оставшиеся символы в буфере будут заполнены символом '$', что может привести к неправильному выводу данных.
- Ваш код не обрабатывает ситуацию, когда файл пуст. Если в файле нет данных для чтения, функция int 21h все равно будет читать 10 символов, что может привести к неправильному выводу данных.
- Вы не закрываете файл после чтения данных. Это может привести к утечке ресурсов.