Битовые карты шрифтов - 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

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

  1. ; masm dos com # - здесь нет никаких действий, комментарий задаёт тип файла и среды разработки
  2. .model tiny .code .386 org 100h - здесь также нет действий, эти строки описывают модель памяти, кодовый сегмент и сегмент данных
  3. WIDTH_SCREEN equ 640 HEIGHT_SCREEN equ 480 - здесь определяются константы, описывающие размеры экрана
  4. start: mov ax,12h int 10h - здесь устанавливается графический режим 640х480 16 цветов
  5. push 0A000h pop es - здесь подключается видеосегмент
  6. push 0F000h pop gs - здесь подключается графический шрифт для символов 0-7Fh
  7. xor di,di mov bx,offset Hello - здесь инициализируются счётчики и адрес текстовой строки
  8. movzx si,byte ptr [bx] - здесь извлекается очередной символ из строки
  9. *lea esi,[esi8+0FA6Eh]** - здесь формируется адрес символа в шрифте
  10. mov cx,8 - здесь инициализируется счётчик байтов
  11. movs byte ptr es:[di],gs:[si] - здесь символ выводится на экран
  12. add di,WIDTH_SCREEN/8 - 1 - здесь происходит сдвиг на следующую строку
  13. loop @b - здесь выполняется цикл до тех пор, пока не будет выведен весь текст
  14. sub di,WIDTH_SCREEN - 1 - здесь происходит сдвиг на следующую строку
  15. inc bx - здесь увеличивается счётчик байтов
  16. cmp byte ptr [bx],0 - здесь проверяется, является ли текущий символ последним
  17. jnz next - здесь выполняется цикл, пока не будет найден последний символ
  18. exit: mov ah,0 int 16h mov ax,3 int 10h ret - здесь происходит выход из программы
  19. Hello db Hello, world!,0 - здесь определяется текстовая строка
  20. end start - здесь задаётся точка входа в программу

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


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

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

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