It's called "USB_ASM_Service" for a reason.
It's ASM compatible, even though it uses some PBP syntax.

Those PBP statements don't use any of PBP's system registers.

When you made it ASM, was it also Low Priority?