La BIOS almacena información sobre el estado de los leds del teclado en la posición de memoria (modo real) 0040:0097 (hexadecimal). El bit menos significativo almacena el estado del LED Bloq Despl, el siguiente al bloq. num, y el siguiente al Bloq. Mays, donde un 1 indica activo y un 0 apagado.
O sea un valor de, por ejemplo, 3 indica que están encendidos los leds de Bloq Num y Bloq Despl.
Puedes modificar ese byte si quieres que se modifique el estado de los leds. Pero para que la modificación tenga efecto, hay que avisar a la BIOS llamando, por ejemplo, a la función 2 de la int 16h (la del teclado).
Esto funciona en MS-DOS. Si pretendes utilizarlo en Windows, Linux o Beos, donde el sistema operativo se ejecuta en modo protegido, y la BIOS (en modo real) deja de tener sentido, tendrás problemas... empezando por la imposibilidad de acceder a la variable de la BIOS situada en la posición de memoria anterior.
La única solución que se me ocurre ante eso sería acceder directamente al hardware del teclado (puertos 60h y 61h si no recuerdo mal)... pero habría que saber cómo obtener la información de los LEDS a través de esos puertos (lo que en el método anterior hace la BIOS), y yo no puedo ayudarte porque no lo sé. A parte de que el sistema operativo tendría que permitirte que accedieras a esos puertos, cosa que seguramente no haga...
Suerte!