Другие языки программирования и технологии

ассемблер, Как сделать мигание разными цветами?

model small .data mes db 'assembler_miganie$' .code start: mov ax,@data mov ds,ax mov ah,0 ;видео режим mov al,3 int 10h mov AH,09 ;Функция вывода mov BH,00 ;Страница 0 mov BL,4 ;Мигание, инверсия mov CX,11;11 раз m1: int 10h ;Вызвать bios loop m1 lea dx,mes int 21h mov ah,1 int 21h mov ah,4ch int 21h end start
Чёрт, невнимательно прочитал вопрос и написал про мигание лампочками клавиатуры.. . извиняюсь за оффтоп, но овтет оставлю, вдруг кому пригодится =)

А ассемблерщики знают толк в извращениях! =)
Нужно всего лишь работать с user32.dll, на шарпе это выглядит так (надеюсь, разберётесь, раз уж на асме пишите) :

private const byte VK_SCROLL = 0x91;
private const byte VK_NUMLOCK = 0x90;
private const byte VK_CAPITAL = 0x14;

private const uint KEYEVENTF_KEYUP = 0x2;

[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);

[DllImport("user32.dll", EntryPoint = "GetKeyState", SetLastError = true)]
static extern short GetKeyState(uint nVirtKey);
//-------------------------------------------------------Scroll
public static void SetScrollLockKey(bool newState)
{
bool scrollLockSet = GetKeyState(VK_SCROLL) != 0;
if (scrollLockSet != newState)
{
keybd_event(VK_SCROLL, 0, 0, 0);
keybd_event(VK_SCROLL, 0, KEYEVENTF_KEYUP, 0);
}
}

public static bool GetScrollLockState()
{
return GetKeyState(VK_SCROLL) != 0;
}
//-------------------------------------------------------NUM
public static void SetNumLockKey(bool newState)
{
bool scrollLockSet = GetKeyState(VK_NUMLOCK) != 0;
if (scrollLockSet != newState)
{
keybd_event(VK_NUMLOCK, 0, 0, 0);
keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0);
}
}

public static bool GetNumLockState()
{
return GetKeyState(VK_NUMLOCK) != 0;
}
//-------------------------------------------------------Caps
public static void SetCapsLockKey(bool newState)
{
bool scrollLockSet = GetKeyState(VK_NUMLOCK) != 0;
if (scrollLockSet != newState)
{
keybd_event(VK_CAPITAL, 0, 0, 0);
keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0);
}
}

public static bool GetCapsLockState()
{
return GetKeyState(VK_CAPITAL) != 0;
}

А включать/выключать вот так:

//__________________OFF_____________________
SetNumLockKey(false); //NumLock OFF
SetCapsLockKey(false); //CapsLock OFF
SetScrollLockKey(false); //ScrollLock OFF

//__________________ON_____________________
SetScrollLockKey(true); //ScrollLock ON
SetCapsLockKey(true); //CapsLOck ON
SetScrollLockKey(true); //ScrollLock ON
МЖ
Мирлан Жаугашты
660
Лучший ответ
в младшем байте регистра В для функции 09 как раз и задается цвет:

биты:

7 - мигание = 1/норма = 0

6,5,4 - цвет фона (биты соответственно - красный, зеленый, синий)

3 - яркость (1= яркий символ/0 - обычный) . Для задания 16 цветов у символов

2,1,0 - цвет символа (биты соответственно - красный, зеленый, синий)
Anatol Быков
Anatol Быков
8 415
Кадырбек Балмагамбетов а можна пример показать!