This is a snippet from a general-purpose library function that is (effectively) non-application specific and, by design, can make no assumptions about the context of the calling process. Hint: The assumption the code makes has to do with interrupts. Do you see a problem?
_GenericFunctionA: MOV A, R7 RL A ADD A, #array_base MOV R0, A CLR EA MOV A, @R0 JNB ACC.BIT_X, ?C0026 JNB ACC.BIT_Y, ?C0026 SETB ACC.BIT_Z ?C0026: SETB ACC.BIT_N XCH A, @R0 SETB EA JB ACC.BIT_N, ?C0027 MOV R7, #0 RET ?C0027: MOV R7, #1 RET