Поэтому нужно работать с видеопамятью напрямую. Ну вот помещаю в ES сегмент видеопамяти, и устанавливаю режим 13h: 320x200x256: Код (Text): org 100h push 0a000h pop es mov ah, 00h mov al, 13h int 10h А что дальше? Как изменять значения ячеек? И формат какой у них, номер;цвет ? => Пишу на FASM
http://democoder.ru/article/221 Тоже недавно страдал фигней на досуге: xD Код (Text): org 100h push 0x0A000 pop es mov al,13h int 10h stosw mov cx,320 hz: push cx mov cx,240 vr: rdtsc mov bp,ax stosb loop vr pop cx loop hz mov ah,1h int 21h ret
Everything Просто Mov в режиме 13h: 320x200x256: каждый байт это индекс цвета из палитры. stosb используют для оптимизации по размеру чтобы уместиться в 256 Байт или 4КБайта. Для того чтобы поставить точку нужно вычеслить ее адресс. База+(y*Ширина+x)*Число_байт_в_пикселе Для оптимизации по скорости от умножения избавляются через сумирование.
Вот еще док: http://www.faqs.org/faqs/assembly-language/x86/general/part1/section-12.html Прочитал про эту инструкцию, вроде понятно, рисую где хочу )) SmanxX1, а нафиг нужен первый stosw ? он же ничего не дает?
Вот и почитай, что написано по той ссылке которую ты привел, а потом внимательно прочитай здесь: http://democoder.ru/article/221
Ну видел. Это шоб обнулить DI, но зачем, если у тебя тут BP: Код (Text): mov bp,ax stosb Почему тут BP ?
Everything Дело не в STOS/MOVS и т.д., хотя изучить эти команды, конечно, надо: иногда они очень упрощают жизнь. Но просто для вывода информации на экран достаточно знать, где расположена видеопамять и в каком формате там хранятся данные. Ну а эти вещи зависят от режима работы видеоадаптера. Под ДОСом видеопамять графического режима начинается с адреса A0000, ну а формат хранимой информации зависит, понятное дело, от установленного режима.
Чуваки, еще вопрос возник! Разобрался, я со stosb и т.д. Вот код для реального режима: Код (Text): use16 org 100h mov ax, 13h int 10h push 0a000h pop es mov di, 32160 mov al, 0dh stosb mov ah, 00h int 16h int 20h Хочу сделать тоже, но для защищенного режима. Т.к. значение, которое в es кладем равно 0a000h, то в защищенном оно будет равно 0a0000h (смещение на 4). Но почему этот код не пашет? Код (Text): use32 org 100h mov ax, 13h int 10h mov ebx, 32160 add ebx, 0a0000h mov al, 0dh mov byte [ebx], al mov ah, 00h int 16h int 20h Просто черный экран консоли выходит... Хелп какбэ
во первых use 32 это еще не защищённый режим ) это только код для защищённого режима в который ещё переходить нужно, а во вторых, когда реально перейдёшь bios сервисы перестанут работать ) короче кури мануалы
Everything Watcom C++ использует расширение защищенного режима. Библиотека которая выполяет ряд функций как то перехват прерываний. После чего выполняет переключения в реальный режим выполняет нужное прерывание и возрвращается в защищенный режим. А вообще в Watcom C++ можно разные способы компиляции выбрать.