f(int): // entry point to function F taking an int
mov eax, 1 // move 1 into the eax (return value) register
test edi, edi // AND edi (argument) with itself; set ZF (zero flag) if result is 0
je .L4 // jump if ZF is set to label L4
.L3: // LABEL: top of loop
imul eax, edi // eax *= argument
sub edi, 1 // argument -= 1