Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать? Если не жалко, киньте текст программы 
:(
    Опции темы
Гость_Влад
Дата 24.12.2003, 12:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет всем!

Помогите студенту!!!

Вообщем такое чудо! Нужно в видеорежиме 320*200 256 цветов вывести символ увеличенный в 2 раза заданным цветом. Координаты левого нижнего угла должны быть X в CX, Y - AL, в DL должен быть ASCII символа. Ну а цвет в DH. Строку выводить используя шрифт 8*8.

Зарание СПАСИБО!
  Вверх
p0s0l
Дата 24.12.2003, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Сама интересующая тебя процедура - это PrChar. Остальное для примера...
Код
.model tiny
.386
.code

main proc far

push ds
push 0

mov ax, 13h
int 10h; переход в граф. режим

xor cx, cx; нач. x
mov al, 15; нач. y
mov dl, 32; нач. код символа (все на экран не влазят...)

; вывод ASCII-таблицы
Print:  mov dh, dl
add dh, al
or dh, 20h; dh = цвет символа
call PrChar; вывод символа
add cx, 16; увеличение x-координаты
cmp cx, 320
jnz NotEOL
add al, 16
xor cx, cx
NotEOL: inc dl; увеличение кода выводимого символа
jnz Print

; ожидание нажатия любой клавиши
Pause: mov ah, 1
int 16h
jz Pause

ret

main endp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PrChar - вывод символа
; cx = x (left)
; al = y (lower)
; dl = char
; dh = color
PrChar proc near

push es
push ds
pusha

; изображения символов < 80h находятся по адресу f000:fa6e
mov bx, 0F000h
mov si, 0FA6Eh
test dl, dl
jns Pr1

; изображения символов >= 80h находятся по адресу вектора 1Fh = 0000:007c
xor bx, bx
mov ds, bx
mov si, ds:[007Ch]
mov bx, ds:[007Eh]
sub dl, 80h

Pr1: mov ds, bx

; теперь в ds:si находится начало таблицы шрифта
; нужно вычислить адрес выводимого символа (dl)
movzx bx, dl
shl bx, 3; на каждый символ уходит по 8 байт
add si, bx
add si, 7; si = адрес последней строчки символа

; в es загружается сегмент видеостраницы
push 0A000h
pop es

; вычисление адреса в видеопамяти в соответствии с координатами
xor ah, ah
imul di, ax, 320
add di, cx

; собственно вывод символа в увеличенном размере
mov dl, dh
mov cx, 8
std
Pr2: lodsb ; берем очередной байт выводимого символа
push cx
mov cl, 8
; вывод - проверка всех битов в считанном байте:
; если бит=1, то вывод указанного цвета
; если бит=0, то ничего не выводится
Pr3: shl al, 1
jnc Pr4
mov es:[di], dx
mov es:[di-320], dx
Pr4: inc di
inc di
loop Pr3
pop cx
sub di, 320*2 + 16
loop Pr2

popa
pop ds
pop es

ret
PrChar endp

end main




--------------------
С уважением, г-н Посол.
PM   Вверх
Гость_Влад
Дата 25.12.2003, 00:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Огромное спасибо!
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1261 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.