Estimada,
El SHL es necesario porque el árbol es de ints. El registro BX guarda un índice dentro del arreglo, pero como cada int en x86 ocupa 2 bytes, desde el inicio del arreglo hasta la posición del índice hay (2 * índice) bytes, y por eso se debe multiplicar por 2, o hacer SHL 1, que es lo mismo.
Saludos,
Federico