RE:CapsLock, NumLock y ScrollLock
Para consultarlo, puedes utilizar la función 02h de la int 16. Te dará el resultado en AL.
En el bit 4 tendrás el estado del ScrollLock, en el bit 5 el estado del NumLock, y en el 6 el del CapsLock (si está a uno el bit, estará encendida la luz :-) )
Realmente, la interrupción te dará en AL el byte almacenado en la posición de memoria 0040h:0017h.
Si quieres modificar el estado, bastará que modifiques ese byte según lo que necesites. Modifica solo los bits que quieras cambiar, no metas directamente un valor de byte, porque el resto de los bits también se utilizan (aunque para otras cosas).
Una vez que lo hayas cambiado debes llamar a alguna de las interrupciones del teclado para que las luces se actualicen. Por ejemplo a la función 01 de la int 16.
Por ejemplo, para activar el SrollLock:
; Leemos el estado actual del byte, para solo cambiar el bit 4.
mov ax,40h
mov ds,ax
mov al,[17h]
; Cambiamos el bit 4 (para el 5 sería 20h, y para el 6 40h)
or al,10h
; Guardamos el valor en la posición 0040h:0017h
mov [17h],al
; Llamamos a la interrupción del teclado, para que la BIOS actualice los leds.
mov ah,1
int 16
Espero que te sirva!!!