Открытие текстового файла - Assembler

Узнай цену своей работы

Формулировка задачи:

День добрый. Я в ассемблере разбираюсь очень плохо, но нужна программа, которая выводит ФИО, а затем открывает файл на компьютере, читает его и выводит содержимое на экран. Видел подобную тему, пытался скомпилировать приведенный в ней листинг, но компилятор находит ошибки. Ах да, для дос интел х86. Если кто-то напишет с комментариями буду очень благодарен!

Решение задачи: «Открытие текстового файла»

textual
Листинг программы
  1. DATA SEGMENT
  2.  path db "result.txt",0 ; имя файла для октрытия
  3.  buf  db ?
  4.  str_fio db 10,13, 'Ivanov Ivan', '$'
  5. DATA ENDS
  6.  
  7. SSEG SEGMENT STACK
  8.       db 200 dup(?)
  9. SSEG ENDS
  10.  
  11. CODE SEGMENT
  12.  ASSUME CS:CODE, DS:DATA, SS:SSEG
  13.   start:
  14.     mov ax,DATA ; настроим DS
  15.     mov DS,ax       ; на реальный сегмент
  16.    
  17.     lea dx,str_fio
  18.     mov ah,09h
  19.     int 21h
  20.    
  21.    
  22.     ;открываем файл
  23.     mov ax,3d00h    ; открываем для чтения
  24.     lea dx,path     ; DS:dx указатель на имя файла
  25.     int 21h     ; в ax деcкриптор файла
  26.     jc exit     ; если поднят флаг С, то ошибка открытия
  27.    
  28.     mov bx,ax       ; копируем в bx указатель файла
  29.     xor cx,cx
  30.     xor dx,dx
  31.     mov ax,4200h
  32.     int 21h     ; идем к началу файла
  33.    out_str:
  34.     mov ah,3fh      ; будем читать из файла
  35.     mov cx,1        ; 1 байт
  36.     lea dx,buf      ; в память buf
  37.     int 21h        
  38.     cmp ax,cx       ; если достигнуть EoF или ошибка чтения
  39.     jnz close       ; то закрываем файл закрываем файл
  40.     mov dl,buf
  41.     mov ah,2        ; выводим символ в dl
  42.     int 21h     ; на стандартное устройство вывода
  43.     jmp out_str
  44.    close:           ; закрываем файл, после чтения
  45.     mov ah,3eh
  46.     int 21h
  47.    exit:            ; завершаем программу
  48.     mov ah,4ch
  49.     int 21h
  50. CODE ENDS
  51.   end start

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

  1. Указываем сегменты данных и кода, а также сегмент стека.
  2. Задаем начальный адрес для сегмента данных.
  3. Объявляем переменные:
    • path (путь к файлу).
    • buf (буфер для чтения файла).
    • str_fio (строка, которую выводим на экран).
  4. Инициализируем сегментный регистр DS значением из регистра AX.
  5. Перемещаем указатель на сегмент данных в регистр DS.
  6. Копируем адрес файла в регистр BX.
  7. Инициализируем цикл чтения файла:
    • Вычисляем начальный адрес файла.
    • Перемещаем указатель на начало файла.
    • Читаем файл до конца или до ошибки.
    • Если произошла ошибка или достигнут конец файла, закрываем файл.
    • Выводим прочитанный символ на экран.
  8. Если файл успешно закрыт, закрываем файл.
  9. Завершаем программу.

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


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

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

12   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы