Задать вопрос
MegaCraZy6
@MegaCraZy6
Юзерь

Assembler заметна перерисовка экрана как исправить?

#make_boot# 

org 7c00h 
use16 
jmp start 

e:  
mov ax,cs
mov ds,ax
ret 


put_pix: 
push ax 
push dx 
mov ax, 0a000h 
mov es, ax 
mov ax,320 
mul cx 
pop dx 
add ax,dx 
mov di,ax 
pop ax 
stosb 
ret 

fill_disp: 
mov bx,0000h
push ax 
mov ax,0A000h 
mov ds,ax 
pop ax 
mov ah,al 
mov [bx],ax 
p0: 
add bx,02h
mov [bx],ax 
cmp bx,0FFFEh 
jz e 
jmp p0 

e_draw: 
pop dx 
pop bx 
mov [x],dx 
mov [y],bx 
ret 

draw_sprite_nexline: 
inc si 
mov al,00h 
cmp al,[bx+si] 
jz e_draw 
dec si 
add [y],01h 
mov ax,[x_ret] 
mov [x],ax 
inc si 
jmp draw_sprite_1 

draw_sprite: 
mov ax,bx 
mov dx,[x] 
mov bx,[y] 
push bx 
push dx 
mov bx,ax 
mov ax,[x] 
mov [x_ret],ax 
mov si,0000h 
draw_sprite_1: 
mov ax, 0a000h 
mov es, ax 
mov ax,320 
mov cx,[y] 
mul cx 
mov dx,[x] 
add ax,dx 
mov di,ax 
mov al,[bx+si] 
cmp al,255 
jz draw_sprite_2 
stosb 
draw_sprite_2: 
inc si 
mov al,00h 
cmp al,[bx+si] 
jz draw_sprite_nexline 
add [x],1 
jmp draw_sprite_1 


start: 
mov ah, 0 
mov al, 13h 
int 10h 
p4: 
mov ah,00h
int 1Ah   
mov bx,dx
p0_cycl:
mov ah,00h
int 1Ah
sub dx,bx
cmp dx,1
jz p1_cycl
jnz p0_cycl
p1_cycl:
mov al,89
call fill_disp
add [x],1
mov bx,sprite
mov di,0000h
mov si,di
call draw_sprite
jmp p4 




x_ret dw 0 
x dw 0
y dw 100 


sprite db 15,15,15,15,15,15,15,15,15,0,15,15,15,15,15,15,15,15,15,0,15,15,255,15,15,15,40,15,15,0,15,15,15,15,15,15,15,15,15,0,15,15,15,15,15,15,15,15,15,0,15,15,40,40,40,40,40,15,15,0,15,15,15,15,15,15,15,15,15,0,0


Допуступно чуть меньше 64 000 Кб памяти, поэтому создать второй буффер не могу, а при очистке и отрисовке заново спрайта происходит что-то типо мерцания, заметно что экран очищается и снова рисуется все. Не знаю как исправить...

PS: Только учу ассемблер...
  • Вопрос задан
  • 154 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
fzfx
@fzfx
18,5 дм
> создать второй буффер не могу
> экран очищается и снова рисуется
всё правильно. без буферизации так и должно быть.
решение в общем случае - использовать буферизацию. в вашем случае решения нет, хотя я так и не понял, в чём проблема создать буфер, имея 64 МБ оперативной памяти.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы