Ошибка в программе при работе с файлом - Assembler
Формулировка задачи:
DOSBox выводит unable top open file, или fatal dos error ax = 6
.model small .stack 256 .data fname db 'text.txt', 0 handle dw ? readbuf db ? .code start: mov ax, @data mov ds, ax lea dx, fname mov ah, 3ch ; создание файла mov cx, 2 ; атрибут файла int 21h ; описатель или код ошибки в ax jc errf ;; carry flag is set if error mov handle, ax mov dx, offset fname mov bx, handle ; описатель mov ah, 40h ; запись mov cx, 8 int 21h mov bx, handle mov ah, 3eh ; закрыть int 21h jmp fin errf: mov ah, 02h ; вывод символа mov di, '!' int 21h ; открытие файла mov ah, 3dh lea dx, fname ; offset здесь неработает ?? mov al, 0 ; режим открытия int 21h mov handle, ax ; чтение файла mov ah, 3fh mov bx, handle mov dx, offset readbuf mov cx, 10 int 21h ; закрыть mov bx, handle mov ah, 3eh int 21h ; вывод строки mov ah, 09h mov dx, offset readbuf int 21h fin: mov ax, 4C00h int 24h end start
Решение задачи: «Ошибка в программе при работе с файлом»
textual
Листинг программы
mov bx,stdout(равный 1) mov ah, 40h ; запись mov cx, тут длина lea dx,откуда = mov dx, offset откуда int 21h
Объяснение кода листинга программы
mov bx, stdout
- присваивает регистру BX значение, равное 1.mov ah, 40h
- устанавливает значение регистра AH равным 40h, что является кодом операции записи.mov cx, тут длина
- присваивает значение регистру CX, которое, вероятно, представляет собой длину данных для записи.lea dx,откуда = mov dx, offset откуда
- устанавливает значение регистра DX, которое указывает на место, откуда нужно записать данные. Возможно, это смещение в файле, которое вычисляется как сумма базового адреса и смещения.int 21h
- вызывает функцию BIOS, которая выполняет операцию записи в файл.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д