v was byte-zero-extend loaded from stack argument MOVBLZX v+0(FP), AX
v was shifted right by 4 SHRB $4, AL
compiler makes sure that higher bytes of AX are zero MOVBLZX AL, AX
Step 3 is not neccessary since original MOVBLZX v+0(FP), AX is zero-extend move and after it AX[31:8] is zero and logical right shifts preserve that property (even more: for unsigned v, i if we know at some time that v is <= A, for v>>i we can know that it is <= A/2^i).
What did you expect to see?
No high-bytes rezeroing after right shift on zero-extended byte-loaded register.