Я слышал, что int 10h, ah = 0Ch работает довольно медленно, и чтобы получить разумную скорость, мне нужно было бы перейти в память и поместить значение в пиксель, который я хочу, я установил свой видеорежим 13h
с помощью int 10h
. призыв изменить режим видео:
mov ah , 0
mov al , 13h
int 10h
и это процедура, которую я написал, чтобы поместить пиксель в заданные координаты:
drawFaster proc
; bp + 2 - row (dx)
; bp + 4 - column (cx)
; bp + 6 - color
mov bp , sp
pushad
mov ax , 0A000h - presumably the memory address of the screen
mov es , ax
mov ax , [bp + 2]
mov bx , [bp + 4]
mov cx , 320
mul cx
add ax , bx
mov di , ax
mov ax , [bp + 6]
mov [es:di] , al
popad
ret 6
endp
код, вызывающий функцию:
push bp
mov ax , 30
push ax
mov cx , 50
push cx
mov dx , 50
push dx
call drawFaster
pop bp
но по какой-то причине это не дает результатов, я не знаю, неверен ли адрес памяти или что-то еще. Мне нужна ваша помощь. Спасибо!
Странно то, что следующий фрагмент кода работает
mov ax , 0A000H
mov es , ax
mov [es:0] , 30
но следующий фрагмент кода этого не делает:
mov ax , 0A000H
mov bx , 0
mov es , ax
mov [es:bx] , 30
0A0000h
. Вывод графики с отображением памяти - person Peter Cordes   schedule 20.05.2018[bp + 6]
? И это будет записывать только 1 пиксель за вызов. Действительно ли OP выглядела действительно близко, чтобы убедиться, что это сработало? - person David Wohlferd   schedule 20.05.2018pusha/popa
похож на 10- В 30 раз медленнее, чем оптимизированная, рисуйте некоторые варианты формы, записывающие несколько пикселей за один раз, с минимальной настройкой на пиксель. Ваш способ будет лишь ненамного быстрее, чем вызов BIOS (хотя и будет быстрее). - person Ped7g   schedule 20.05.2018es:0
, это работает, но если я используюmov bx , 0
, а затемes:bx
, это не так. Любые идеи? - person Guy Sudai   schedule 20.05.2018es
на сегмент данных и в первую очередь указать в данныхfakescreen db 320*4 dup (0)
, чтобы у вас был фальшивый экран размером 320x4, который можно было бы легко проверить с помощью TD, и сначала проверить там код, а затем es = A000 на самом деле. - person Ped7g   schedule 20.05.2018ds=A000
, когда мне не удавалось записывать пиксели с помощью простогоmovs/stos
или я проделывал с ними дополнительные манипуляции. Это просто не объясняет ваших проблем с другими вариантами. Можете ли вы создать нерабочий пример EXE / COM, загрузить его куда-нибудь и поставить здесь ссылку в комментарии? Я могу попробовать в своем собственном dosbox, чтобы увидеть, сработает ли это для меня. - person Ped7g   schedule 20.05.2018mov [es:bx],30
неработающего исполняемого файла ... - person Ped7g   schedule 20.05.2018