Yeah you are right. The 'bl' stands for 'branch with link' so it will go to another location and return to the calling point once completed. We branched to an ingame routine which finds a pokemons attribute. From this:
Takes Pokémon's Address in R0 and R1 as an Index; Returns decrypted values to R0. Since we push r0 before the branch r0 contains nothing (ie 0 which is pokemon we are checking)
r1 contains whatever you want. So if you want to check the hold item:
mov r1, #0xC
Then the game returns the hold item to r0.
That's how it works.
So have a go at it, I'll try to fix it up too