Вывести на экран содержимое текстового файла, вывод в графическом режиме, освободить память - 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
Объяснение кода листинга программы
Вот что получилось:
- Код написан на ассемблере.
- В сегменте данных размещён текст, который нужно вывести на экран.
- Перед выводом текста программа уточняет параметры видеорежима: номер видеостраницы, количество символов в строке (кол-во колонок) и количество строк на экране.
- Для получения номеров видеостраницы и кол-ва строк используются сервисы BIOS, а для получения кол-ва колонок — область данных Video BIOS.
- Затем программа готовит фон для строки, выводит строку и ожидает нажатия любой клавиши.
- Чтобы вывести строку, программа использует чипсет VGA, который поддерживает режим 80x25 символов.
- Когда программа заканчивает работу, она выводит на экран сообщение Press any key to exit... и завершает своё выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д