Compilers use the x86's memory addressing system to work around its limitation of having a maximum of two operands per instruction. They use the lea instruction to calculate the address of memory, effectively allowing three-operand addition and specifying the destination register.