The first response you got is correct, but there is one catch. r0 is cleared only if the code does not branch to DONE.
So what must happen is that r5 must contain a zero (because of the comparison and subsequent branch instructions), then r0 will be cleared.
I am not familiar with this processor's language, but this is what I understand from the above code.
The first instruction is a MoVe Negative, so the number 128 (10000000 in binary) is negated and placed in r2. r2 now contains 01111111.
The BIt Clear operation negates the contents of r2 (which changes it back to 10000000) and ANDs that with the contents of r5.
The CoMPare determines whether r5 is a zero
r5 would be zero if it contained any number other than one with a high order bit value of 10000000. In other words, if r5 contains a number less than 128, the CMP instruction will find that r5 contains a zero (because the BIC instruction cleared all the low order bits).
If r5 contains a zero, then the Branch Not Equal instruction will not execute and r0 will be set to zero.
It has been a long time since I dabbled with assembly of any kind, so don't just copy what I said. Read the processor instructions and follow along with my example. I may have made a mistake, but you should be able to correct it easily.
Basically, just follow through the instructions and see under what conditions the AND statement executes