Эта программа должна просто читать текст из файла и выводить его. Проблема в том, что имя файла вводится пользователем.Assembly x86 NULL terminator (TASM)
То, что я сделал до сих пор:
- Я поставил нулевой терминатор, чтобы указать конец строки
- И сделал новый текстовый файл в точной папке, в которой файл .exe является
Что я получаю:
Файл не может быть открыт
.model small .stack 100h .data filename db 255 dup(0) line db 255 dup(0) filehandle dw ? line_len dw ? .code newline macro ;NEW LINE ; mov dl, 10 ; mov ah, 02h ; ; int 21h ; ; mov dl, 13 ; mov ah, 02h ; ; int 21h ; endm ;NEW LINE main: mov ax, @data mov ds, ax lea si, filename mov ah, 01h char_input: int 21h cmp al, 0dh je zero_terminator mov [si], al inc si jmp char_input zero_terminator: mov [si], '\0' int 21h open_file: lea dx, filename mov al, 0 mov ah, 3Dh int 21h mov filehandle, ax int 21h read_line: mov ah, 3Fh lea bx, filehandle mov cx, 1 int 21h cmp ax, 0 ;EOF je EO_file inc line_len jmp read_line: EO_file: newline ;macro lea dx, line ;print line mov bx, 1 mov ah, 40h mov cx, line_len int 21h mov ah, 4ch int 21h end main
У вас есть лишние вызовы 'int 21h' без видимых причин. Что касается открытия файла, все выглядит хорошо. Используйте отладчик, чтобы проверить, правильно ли сохранено имя файла и каков дескриптор возвращаемого файла. Изменить: убедитесь, что ваш ассемблер понимает '' \ 0'', или еще лучше, просто напишите '0'. – Jester
Спасибо, теперь он работает с 0 вместо '\ 0'. – beingas
Но, к сожалению, он застрял в цикле чтения ... Программа не может найти конец файла, даже если я проверю возвращаемое значение AX – beingas