Запись и чтение строк из файла - Assembler
Формулировка задачи:
Нужно доработать код!
Задание полное таково: создать файл, вбить в него две строки (я так понимаю можно сделать это в коде программы, а не с клавиатуры), вывести все содержимое файла на экран, а затем вывести 10-15 и 2-5 байты из первой строки.
Помогите разобраться) Буду очень признателен!)
; masm dos exe # .286 .model small .data file_name db 'c:/gg.com',0 write_word db "Hello",0dh,0ah,"My dear friend",0 _size dw $-write_word buf db 99 dup('$') Handel dw ? .code start: mov ax,@data mov ds,ax mov es,ax ; add your code here mov ah,3Dh mov dx,offset file_name mov al,2 int 21h mov Handel,ax mov bx,ax mov ax,4202h mov cx,0 mov dx,0 int 21h mov ah,40h mov bx,Handel mov cx,_size mov dx,offset write_word int 21h mov ax,4200h mov bx,Handel mov cx,0 mov dx,0 int 21h ;read mov ah,3Fh mov bx,Handel mov cx,99 mov dx,offset buf int 21h mov dx,offset buf mov ah,9 int 21h ;close file mov ah,3Eh mov bx,Handel int 21h mov ah,4Ch ; exit to operating system. int 21h end start
Решение задачи: «Запись и чтение строк из файла»
textual
Листинг программы
; masm dos exe # .286 .model small .stack 100h .data file_name db 'gg.txt',0 string1 db "Hello, my dear friend",0dh,0ah size1 dw $-string1 string2 db "I'm glad to see you" size2 dw $-string2 buf db 99 dup('$') bufsize dw $-buf buflen dw ? Handel dw ? newline db 13,10,'$' .code start: mov ax,@data mov ds,ax mov es,ax ;open file to write mov ah,3Ch mov dx,offset file_name mov cx,0 int 21h mov Handel,ax ;save the first string mov ah,40h mov bx,Handel mov cx,size1 mov dx,offset string1 int 21h ;save the second string mov ah,40h mov bx,Handel mov cx,size2 lea dx, string2 int 21h ;close file mov ah,3Eh mov bx,Handel int 21h ;open file to read mov ah,3Dh mov dx,offset file_name mov al,0 int 21h mov Handel,ax ;read file mov ah,3Fh mov bx,Handel mov cx,bufsize lea dx,buf int 21h mov buflen,ax ;close file mov ah,3Eh mov bx,Handel int 21h ;write strings mov ah,40h mov bx,1 mov cx,buflen lea dx,buf int 21h ;new line mov ah,09h lea dx,newline int 21h ;write 10-15 chars mov ah,40h mov bx,1 mov cx,15-10+1 lea dx,buf+10-1 int 21h ;new line mov ah,09h lea dx,newline int 21h ;write 2-5 chars mov ah,40h mov bx,1 mov cx,5-2+1 lea dx,buf+2-1 int 21h ;new line mov ah,09h lea dx,newline int 21h mov ah,4Ch ; exit to operating system. int 21h end start
Объяснение кода листинга программы
- Объявление переменных:
- file_name (файл, с которым будет работать программа)
- string1, string2 (строки, которые будут записаны в файл)
- size1, size2 (размеры строк)
- buf (буфер для чтения данных из файла)
- bufsize (размер буфера)
- buflen (количество символов в буфере)
- Handel (идентификатор файла при записи)
- newline (строка, обозначающая перевод строки)
- Код программы:
- Открытие файла для записи (переменная Handel получает идентификатор файла)
- Запись в файл первой строки (string1)
- Запись в файл второй строки (string2)
- Закрытие файла для записи
- Открытие файла для чтения (переменная Handel получает идентификатор файла)
- Чтение из файла в буфер (buf) до определенного размера (bufsize)
- Закрытие файла для чтения
- Вывод на экран содержимого буфера
- Вывод на экран строки, обозначающей перевод строки
- Вывод на экран определенной части буфера (с 10-го по 15-й символ)
- Вывод на экран строки, обозначающей перевод строки
- Вывод на экран определенной части буфера (с 2-го по 5-й символ)
- Вывод на экран строки, обозначающей перевод строки
- Выход из программы
- Преимущественно, код написан на ассемблере для операционной системы DOS.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д