Запись и чтение строк из файла - 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

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

  1. Объявление переменных:
    • file_name (файл, с которым будет работать программа)
    • string1, string2 (строки, которые будут записаны в файл)
    • size1, size2 (размеры строк)
    • buf (буфер для чтения данных из файла)
    • bufsize (размер буфера)
    • buflen (количество символов в буфере)
    • Handel (идентификатор файла при записи)
    • newline (строка, обозначающая перевод строки)
  2. Код программы:
    • Открытие файла для записи (переменная Handel получает идентификатор файла)
    • Запись в файл первой строки (string1)
    • Запись в файл второй строки (string2)
    • Закрытие файла для записи
    • Открытие файла для чтения (переменная Handel получает идентификатор файла)
    • Чтение из файла в буфер (buf) до определенного размера (bufsize)
    • Закрытие файла для чтения
    • Вывод на экран содержимого буфера
    • Вывод на экран строки, обозначающей перевод строки
    • Вывод на экран определенной части буфера (с 10-го по 15-й символ)
    • Вывод на экран строки, обозначающей перевод строки
    • Вывод на экран определенной части буфера (с 2-го по 5-й символ)
    • Вывод на экран строки, обозначающей перевод строки
    • Выход из программы
  3. Преимущественно, код написан на ассемблере для операционной системы DOS.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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