Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод строки с предварительной очисткой экрана
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Account
Ввот загвоздка такая ,программа была написана, но очищал экран сначала просто выводом символа пробел
n-ое число)), потом вот решил переделать так чтоб очистка производилась 06h функцией в 10h прерывании, вот код

prg segment
assume CS:prg,DS:data

begin:
mov ax,data
mov ds,ax
xor cx,cx
mov ax,0600h
mov dx,184fh
mov bh,0h
int 10h
mov ah,02h
mov dx,0b0fh
int 10h
mov cx,10h
mov bx,0
l: mov dl,mesg[bx]
int 21h
inc bx
loop l
mov ah,10h
int 16h
mov ax,4c00h
int 21h
prg ends
data segment
mesg db 'aaaaaaaaaaaaaaaa$'
data ends
stk segment stack
db 256 dup (?)
stk ends
end begin


но не пойму в чем дело, очистка ведь производится перед выводом строки, а всеравно происходит затираниее
(проверял сдвигая нижный правый угол указываемый в 06h функции 10h прерывания)?
volvo
       xor cx,cx
mov ax,0600h
mov dx,184fh
mov bh,07h ; <--- Обрати внимание: это - АТРИБУТ
int 10h ; чистим окно

mov bh, 0 ; <--- А это - номер видеостраницы
mov ah,02h
mov dx,0b0fh
int 10h ; устанавливаем курсор в заданное место

; здесь - вывод строки
, хотя строку гораздо проще выводить через
       mov ah, 9
lea dx, mesg
int 21h
Account
volvo, опять тебе спасибо, что то я в описании данной функции в данном прерывании не досмотрел что это отребут, невнимательность моя)
Но если не трудно объясни, что дает этот атрибут, какая его функция, что то я не догоняю?(

mov bh,07h ; <--- Обрати внимание: это - АТРИБУТ


Вывод строки такой легче, но требуется именно посимвольный)))
volvo
Цитата
какой толк от данного тогда атрибута?
Какой толк? А простой... Тот атрибут, который ты устанавливаешь при вызове функции 06, устанавливается для каждого символа (точнее, для каждой позиции на экране), который был очищен вызовом данной функции. А когда ты выводишь строку, ты устанавливаешь только символы, атрибуты не меняются, какие были, те и остаются. Что значит атрибут 00h, объяснять не надо? Вот и подумай, как будет выглядеть строка, когда ты выведешь ее с данным атрибутом...

Можешь воспользоваться функцией 09h того же 10h-прерывания, чтобы выводить символ с атрибутом в текущей позиции курсора, тогда будет неважно, чему равнялся BH при вызове функции "свертка окна вверх (06h)"
Account
volvo, спасибо за разъяснение. Вспомнил, как то проглядывал уроки Калашникова, там как раз это было когда выводились символы с атрибутами. Так как я не ас в асме, да и особо с атрибутами не часто сталкивался, поэтому и не обратил внимание на описание да и не вспомнил.

Просто восхищаюсь Вашими познаниями и умениями)
Account
volvo, а где можно взять данные по указанию в атрибуде цветовоой гаммы, т.е. коды соответсвующие цветам, я попробовал конечно поэксперементировать, но выяснять что то в ручную все вариации не охото)))
volvo
Младшие 4 бита (0 .. 3) - цвет символа:
          0 - черный                  8 - серый
1 - синий 9 - голубой
2 - зеленый 10 - светло-зеленый
3 - циан 11 - светлый циан
4 - красный 12 - светло-красный
5 - магента 13 - светлая магента
6 - коричневый 14 - желтый
7 - белый 15 - ярко-белый

, следующие 3 бита (4 .. 6) - цвет фона (понятно, что возможны только значения 0 .. 7, то есть, неяркие цвета), самый старший бит - Blink, мерцание символа
Account
Спасибо)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.