Битовые карты шрифтов - Assembler
Формулировка задачи:
В задание по лабе нужно воспользоваться 1 из битовых карт шрифтов,можете подсказать где их искать? Буду очень благодарен за любую помощь
Решение задачи: «Битовые карты шрифтов»
textual
Листинг программы
; masm dos com # .model tiny .code .386 org 100h WIDTH_SCREEN equ 640 HEIGHT_SCREEN equ 480 start: mov ax,12h ;графический режим 640х480 16 цветов int 10h push 0A000h ;видеосегмент pop es push 0F000h;графический шрифт для символов 0-7Fh хранится по адресу F000:FA6Eh pop gs xor di,di ;левый верхний угол mov bx,offset Hello ;адрес текстовой строки next: movzx si,byte ptr [bx];получаем очередной символ из строки Hello lea esi,[esi*8+0FA6Eh];умножаем индекс символа на 8 + адрес символа в шрифте mov cx,8 ;8 байт на одну букву @@: movs byte ptr es:[di],gs:[si]; вывод на экран add di,WIDTH_SCREEN/8 - 1; сдвигаемся на следующую строку loop @b sub di,WIDTH_SCREEN - 1 inc bx cmp byte ptr [bx],0 ;это последний символ? jnz next exit: mov ah,0 int 16h mov ax,3 ;восстанавливаем текстовый режим int 10h ret Hello db "Hello, world!",0 end start
Объяснение кода листинга программы
- ; masm dos com # - здесь нет никаких действий, комментарий задаёт тип файла и среды разработки
- .model tiny .code .386 org 100h - здесь также нет действий, эти строки описывают модель памяти, кодовый сегмент и сегмент данных
- WIDTH_SCREEN equ 640 HEIGHT_SCREEN equ 480 - здесь определяются константы, описывающие размеры экрана
- start: mov ax,12h int 10h - здесь устанавливается графический режим 640х480 16 цветов
- push 0A000h pop es - здесь подключается видеосегмент
- push 0F000h pop gs - здесь подключается графический шрифт для символов 0-7Fh
- xor di,di mov bx,offset Hello - здесь инициализируются счётчики и адрес текстовой строки
- movzx si,byte ptr [bx] - здесь извлекается очередной символ из строки
- *lea esi,[esi8+0FA6Eh]** - здесь формируется адрес символа в шрифте
- mov cx,8 - здесь инициализируется счётчик байтов
- movs byte ptr es:[di],gs:[si] - здесь символ выводится на экран
- add di,WIDTH_SCREEN/8 - 1 - здесь происходит сдвиг на следующую строку
- loop @b - здесь выполняется цикл до тех пор, пока не будет выведен весь текст
- sub di,WIDTH_SCREEN - 1 - здесь происходит сдвиг на следующую строку
- inc bx - здесь увеличивается счётчик байтов
- cmp byte ptr [bx],0 - здесь проверяется, является ли текущий символ последним
- jnz next - здесь выполняется цикл, пока не будет найден последний символ
- exit: mov ah,0 int 16h mov ax,3 int 10h ret - здесь происходит выход из программы
- Hello db
Hello, world!
,0 - здесь определяется текстовая строка - end start - здесь задаётся точка входа в программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д