push, pop, call, ret は良くない書き方をした。すまん。

esp は char* として、

push eax
esp -= 4; *(int*)esp = eax;

pop eax
eax = *(int*)esp; esp += 4;

call START
esp -= 4; *(char**)esp = eip; eip = START;

ret
eip = *(char**)esp;
esp += 4;

ret 8
eip = *(char**)esp;
esp += 4 + 8;

こうだな。