'Is it not neccessary to push EAX in this code? [duplicate]

I am new to assembly, and when I studied on the internet, I found the following code, but I don't know why push eax is not written before mov eax, [ebp+8].

; char* removerng(char* s, char a, char b)
; removes (in place) characters from a to b in string s
    section .text
    global  removerng
removerng:
    ; prologue
    push    ebp
    mov     ebp, esp
    push    ebx ;<- ebx instead of eax?
    push    esi
    push    edi

    ; body <- we don't need eax?
    mov eax, [ebp+8]; load string into return address
    mov esi, [ebp+8]; last char checked
    mov edi, [ebp+8]; last char placed

loop:
    mov bh, [esi]; current char
    inc esi
    test    bh, bh; test for end of string
    jz  fin
    cmp bh, [ebp+12] 
    jl  keep
    cmp bh, [ebp+16]
    jg  keep
    jmp loop

keep:
    mov [edi], bh
    inc edi
    jmp loop

fin:
    mov [edi], bh

    ;epilogue
    pop edi
    pop esi
    pop ebx
    mov esp, ebp
    pop ebp
    ret

Does this mean we can use both push ebx and push eax Could any one help me?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source