bomzzz
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору в зависимости от видео режима. на каждый элемент экрана два байта символ - цвет символа + цвет фона. так как этот видео режим 80 на 24 - вот и считай, в строку 160 байт в высоту 48 Добавлено: по видео режимам полно статей в инете. и кстати для корректности тут надо добавить принудительное переключение в 3-ий (кажется) видео режим Добавлено: с 12 видео режима кажется уже не влазит в один сегмент 64 кбайта и там экран на два банка разбивается по 64 кбайта. и начальный адрес кажется другой. в гугле набери видео режимы Добавлено: http://bomz-co.narod.ru/LOGO.zip вот я делал себе как то для вывода бмп картинки на экран. но и в инете примеров полно рабочих. это надо писать постоянно, я пишу эпизодически потому ниче в упор не помню надо разбираться по нвоой. Цитата: ; =============================================================== ; =============================================================== .186 name LOGO ; =============================================================== ; === Начало программы: === CSEG segment use16 assume cs:cseg, ds:cseg, ss:cseg, es:cseg org 100h ; COM файл ; =============================================================== Start: mov ax, 3D00h ; открываем файл только для чтения lea dx, file ; указатель на строку с именем файла int 21h jnc File_Exist lea dx, No_File ; Ошибка открытия файла mov ah, 09h ; int 21h ; int 20h ; выходим из программы File_Exist: mov handle, ax ; === Готовим основную память === lea bx, Finish shr bx,4 inc bx mov ah,4Ah int 21h ; Ужимаем размер отведенной памяти до метки Finish mov ah, 48h ; выделим блок памяти под буфер mov bx, 4096 ; 4096 * 16 = 65536 байт = 1 сегмент int 21h jnc Memory_OK ; --- mov ah, 3eh ; закрываем файл mov bx, handle int 21h lea dx, Memory_Error mov ah, 09h ; выводим сообщение об ошибке int 21h ; int 20h ; выходим из программы Memory_OK: mov Buffer,ax ; сегмент в основной памяти выделенного блока ; === Установка цветовой палитры === mov ax,4F02h ; переключаем видео режим mov bx,101h int 10h ; --- mov ax, 4200h ; сместить указатель файла от начала mov bx, handle xor cx, cx mov dx, 54 ; на 54 байта - заголовок файла int 21h push Buffer ; переведем регистр сегмента даты на выделенный блок памяти pop ds mov ah, 3fh ; чтение из файла ; mov bx, handle ; mov cx, 1024 ; читаем 1024 байт xor dx, dx ; в начало буфера int 21h ; jnc Pallete_OK ; ошибка чтения файла ; --- push cs ; перведем регистр сегмента даты на сегмент программы pop ds mov es,Buffer ; освободим блок выделенной памяти под буфер mov ah, 49h ; в es параграф блока int 21h mov ah, 3eh ; закрываем файл ; mov bx, handle int 21h mov ax,3h ; возвращаемся в текстовый видео режим int 10h lea dx, Read_Error mov ah, 09h ; выводим сообщение об ошибке int 21h ; int 20h ; выходим из программы Pallete_OK: xor ax, ax mov si, 1024 mov cx, 100h Next_Color: mov dx,3c8h mov al, cl ; прим. когда cx равно 100h в al помещается 0 dec ax ; но при отнимании 1 в al все равно получается FF out dx,al mov dx,3c9h dec si ; пропускаем зарезирвированный байт в палитре BMP dec si ; RED mov al, byte ptr[si] ; в BMP палитре цвета расположены наоборот shr ax, 2 out dx,al dec si ; GREEN mov al, byte ptr[si] shr ax, 2 out dx,al dec si ; BLUE mov al, byte ptr[si] shr ax, 2 out dx,al loop Next_Color push 0A000h ; в es сегмент даты видео буфера pop es mov word ptr ds:[8002h], 0 ; счетчик видео страниц ; === Вывод изображения === Next_Page: push bx ; bx всю дорогу будет содержать хендл файла mov ax, 4F05h xor bx, bx mov dx, word ptr ds:[8002h] int 10h pop bx mov ah, 3fh ; чтение из файла ; mov bx, handle ; mov cx, 8000h ; читаем 32768 байт xor dx, dx ; в начало буфера int 21h ; xor si, si xor di, di mov cx, 8000h Rep movsb ; DS:SI и ES:DI mov ah, 3fh ; чтение из файла ; mov bx, handle ; mov cx, 8000h ; читаем 32768 байт xor dx, dx ; в начало буфера int 21h ; xor si, si mov di, 8000h mov cx, ax Rep movsb ; DS:SI и ES:DI inc word ptr ds:[8002h] cmp word ptr ds:[8002h], 5 jb Next_Page ; === Завершаем программу === push ds pop es push cs pop ds ; mov es,Buffer ;освободим блок выделенной памяти под буфер mov ah, 49h ;в es параграф блока int 21h mov ah, 3eh ; закрываем файл ; mov bx, handle int 21h mov ah, 0 int 16h ; ожидаем нажатия любой клавиши mov ax,3h ; возвращаемся в текстовый видео режим int 10h int 20h ; выходим из программы ; === Блок данных === Buffer dw ? ; сегмент выделенной памяти handle dw ? ; хендл файла file db 'LOGO.BMP',0 ; имя файла No_File db 'ЋиЁЎЄ ®вЄалвЁп д ©« ', 0Dh,0Ah, 24h ; Ошибка открытия файла Read_Error db 'ЋиЁЎЄ звҐ-Ёп д ©« ', 0Dh,0Ah, 24h ; Ошибка чтения файла Memory_Error db 'ЋиЁЎЄ Ї ¬пвЁ', 0Dh, 0Ah, 24h ; Ошибка выделения памяти для буфера ; --- Finish: ;метка усечения памяти программы CSEG ends end Start |
| Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:51 24-10-2011 | Исправлено: bomzzz, 15:05 24-10-2011 |
|