metalm , a veces la solución no está en codificar en assembler sino en cambiar la forma de solucionar el problema.
La pregunta que hizo bruno apunta a este sentido, si la matriz es muy grande probablemente ni el assembler te salve.
Cambiar de lenguaje agilizará el tiempo de refresco pero no el duty cycle o ciclo de trabajo. Esto es lo que en definitiva también influye y mucho en la intensidad del LED.
Tal vez necesites procesar más líneas en paralelo y no cambiar tu código en forma radical. Eso puede implicar o bien tener 2 PICs, o un pic de mayor pinout o bien agregar salidas mediante algún módulo externo (latchs, puertos controlados por SPI o I2C)