The LEA instruction computes a memory address using the same arithmetic that a MOV instruction uses. But unlike the MOV instruction, the LEA instruction just stores the computed address in its target register, instead of loading the contents of that address and storing it.
Consider your first LEA instruction:
lea -0x18(%ebp), %ebx
This instruction computes the sum of -0x18 and the value in the EBP register. It gets some result S. It stores S in the EBX register.
In the addend -0x18, the “-” is a negative sign and the “0x” means it's a hexadecimal constant. So the addend is negative 1816, which is -2410. So this LEA instruction simply subtracts 24 from the value in EBP and stores the result in EBX.
Contrast this with your MOV instruction:
mov -0x4(%ebx), %eax
This instruction computes the sum of -0x4 and the value in the EBX register. It gets some result S. Then it fetches the value of the word at address S in memory, getting some value M. It stores M in the EAX register.