
Лабораторная работа №12 / 1
.DOCВарианты вывода и центрирования строки:
1) Используя функции DOS:
dosseg
.model small
.stack 100h
.data
message db 'Вас приветствует ст.гр.3342 - Митягин С.А.$'
.code
mov ax, @data
mov ds,ax
mov ax, 0003h ; очищаем экран
int 10h
mov ah, 2
mov cx, 12
continue:
mov dl, 0Ah ;переходим на 12-ую строку
int 21h
loop continue
mov cx, 20
continue2:
mov dx, 20h ;смещаемся на 20 символов
int 21h
loop continue2
;в итоге выводим строку в позицию (20,12),
;используя функцию 9h прерывания 21h
mov dx, offset message
mov ah, 9
int 21h
mov ah, 1 ;"задержка"
int 21h
mov ah, 4ch ;выход
int 21h
end
2) Используя функции BIOS:
dosseg
.model small
.stack 100h
.data
message db 'Вас приветствует ст.гр.3342 - Митягин С.А.$'
.code
mov ax, @data
mov ds,ax
mov ax, 0003h ; очищаем экран
int 10h
mov ax, seg message
mov es, ax
mov bp, offset message
mov ah, 13h ; выводим строку, используя
mov al, 0 ; функцию 13h прерывания 10h
mov bl, 00000111b ; черный на белом
mov dh, 12 ; выводим сообщение на
mov dl, 20 ; в позицию (20,12)
mov cx, 41 ; длина строки
int 10h
mov ah, 1 ; "задержка"
int 21h
mov ah, 4ch ; выход
int 21h
end
3) Используя прямое отображение в видеобуфер:
dosseg
.model small
.stack 100h
.data
message db 'Вас приветствует ст.гр.3342 - Митягин С.А.$'
.code
mov ax, @data
mov ds,ax
mov ax, 0003h ;видеорежим 3 (очистка экрана)
int 10h
mov bl, 00001111b ;черный на белом
mov ax, 0B800h ;сегмент дисплея в текстовом режиме
mov es, ax
xor di, di
;пишем в видеопамять - по адресу es:[di]
mov ax, seg message
mov ds, ax
mov si, offset message
mov cx, 80*12+20
;строка находится по адресу ds:[si]
fill:
mov ax, 0f20h;
stosw ;заполнение видеопамяти пробелами до строки
loop fill
mov cx, 41 ;длина строки
continue: ;вывод строки
mov ax, [si]
stosb ;копировать первый байт
mov al, 00000111b
stosb ;затем его атрибут
inc si
loop continue
mov ah, 1 ;“задержка”
int 21h
mov ah, 4ch ;выход
int 21h
end