Вывести на экран содержимое текстового файла, вывод в графическом режиме, освободить память - Assembler

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

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

Ребятыы, нужна помощь. Задание такое: вывести на экран содержимое текстового файла FILE_SPO.txt (размером не более 80 байтов) синими символами на желтом фоне, вывод в графическом режиме, освободить память Перепробовала варианты, но он упорно не хочет считывать с файла его содержимое

Решение задачи: «Вывести на экран содержимое текстового файла, вывод в графическом режиме, освободить память»

textual
Листинг программы
.model small
 
.stack 100h
 
.data
        CrLf            db      0Dh, 0Ah, '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        String          db      'My Little String!'
        LenString       dw      $-String
        X               db      0
        Y               db      0
        ;цвет символов
        Black           equ     0
        Blue            equ     1
        Green           equ     2
        Cyan            equ     3
        Red             equ     4
        Magenta         equ     5
        Brown           equ     6
        LightGray       equ     7
        DarkGray        equ     8
        LightBlue       equ     9
        LightGreen      equ     10
        LightCyan       equ     11
        LightRed        equ     12
        LightMagenta    equ     13
        Yellow          equ     14
        White           equ     15
.data?
        VideoPage       db      ?       ;активная видеостраница
        Columns         db      ?       ;количество сиволов в строке экрана
        Rows            db      ?       ;количество строк на экране
 
.code
 
main    proc
        ;инициализация сегментного регистра ds адресом сегмента данных
        mov     ax,     @data
        mov     ds,     ax
 
        ;
        mov     ax,     0010h
        int     10h
 
        ;перед манипуляциями с курсором уточняем:
        ; - номер видеостраницы
        ; - количество колонок на экране
        ; - количество строк на экране
        ;часть данных получаем через видеосервис BIOS
        mov     ah,     0Fh     ;уточнить параметры видеорежима
        int     10h             ;
        mov     [VideoPage],bh  ;номер текущей видеостраницы
        mov     [Columns],ah    ;число текстовых колонок на экране
        ;часть данных получаем из области данных Video BIOS
        push    es
        mov     ax,     0040h   ;сегмент данных Video BIOS
        mov     es,     ax
 
        mov     al,     es:[0084h];количество строк на экране
        mov     [Rows], al
        pop     es
 
        ;готовим фон для строки
        mov     ax,     0600h
        mov     ch,     [Y]
        mov     cl,     [X]
        mov     dx,     cx
        add     dl,     byte ptr [LenString]
        dec     dl
        mov     bh,     Yellow
        int     10h
        ;вывод строки
        push    es
        push    bp
        mov     ax,     ds
        mov     es,     ax
        mov     ax,     1300h
        lea     bp,     [String]
        mov     cx,     [LenString]
        mov     dh,     [Y]
        mov     dl,     [X]
        mov     bh,     [VideoPage]     ;видеостраница
        mov     bl,     80h or (Blue xor Yellow)        ;attribute
        int     10h
        pop     bp
        pop     es
        ;ожидание нажатия любой клавиши
        mov     ah,     02h
        mov     bh,     [VideoPage]     ;видеостраница
        mov     dl,     0               ;столбец (от 0)
        mov     dh,     [Rows]          ;строка (от 0)
        dec     dh
        int     10h
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
 
        mov     ax,     0003h
        int     10h
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

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

Вот что получилось:

  1. Код написан на ассемблере.
  2. В сегменте данных размещён текст, который нужно вывести на экран.
  3. Перед выводом текста программа уточняет параметры видеорежима: номер видеостраницы, количество символов в строке (кол-во колонок) и количество строк на экране.
  4. Для получения номеров видеостраницы и кол-ва строк используются сервисы BIOS, а для получения кол-ва колонок — область данных Video BIOS.
  5. Затем программа готовит фон для строки, выводит строку и ожидает нажатия любой клавиши.
  6. Чтобы вывести строку, программа использует чипсет VGA, который поддерживает режим 80x25 символов.
  7. Когда программа заканчивает работу, она выводит на экран сообщение Press any key to exit... и завершает своё выполнение.

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


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

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

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