случий просто анегдотический,
написал 2-е функции которая рисует квадраты,
запихнул их в прерывание клавиатуры,
при запуске почему то срабатывает 1-ая(simb_prb) функция,
а вторая(vesa_box) при нажатии клавишь
IRQКод:
IRQ2:
push ax
in al,60h ; AL содержит скан-код клавиатуры, но в
; этом примере он не сохраняется -
; обработчик IRQ 1 работает как заглушка.
in al,61H
mov ah,al
or al,80h
out 61H,al
xchg ah,al
out 61H,al
mov eax, 3
call simb_prb
mov eax, 2
call vesa_box
mov al,20h
out 20h,al
pop ax
IRETD
FUNCTIONКод:
simb_prb:
imul eax, 30
mov ebx, eax
mov eax, 100
xor edx, edx
mov dx , [vbe_mode.XResolution]
imul eax, edx
add eax, ebx
imul eax, 3
add eax, [vbe_mode.PhysBasePtr]
mov edi, eax
mov ecx, 20
simb_prb_agn:
mov ebx, ecx
mov al, 99h
mov ecx, 60
rep stosb
xor eax, eax
mov ax, [vbe_mode.XResolution]
imul eax, 3
add edi, eax
sub edi, 60
mov ecx, ebx
loop simb_prb_agn
ret
vesa_box:
; y*W+x
; 20*W+50*a
imul eax, 30
mov ebx, eax
mov eax, 20
xor edx, edx
mov dx , [vbe_mode.XResolution]
imul eax, edx
add eax, ebx
imul eax, 3
add eax, [vbe_mode.PhysBasePtr]
mov edi, eax
mov ecx, 20
vesa_box_agn:
mov ebx, ecx
mov al, 99h
mov ecx, 60
rep stosb
xor eax, eax
mov ax, [vbe_mode.XResolution]
imul eax, 3
add edi, eax
sub edi, 60
mov ecx, ebx
loop vesa_box_agn
RET