Source: https://www.csie.ntu.edu.tw/~cyy/courses/assembly/12fall/lectures/handouts/lec15_x86procedure.pdf