2014-11-07 4 views
0

최근에 저는 기술을 향상시키기 위해 많은 어셈블리 프로그래밍을 해왔습니다. 로컬 변수를 스택에 푸시 할 수 있다는 것을 알게되었지만 pushl 8(%esp) 그러나 혼란 스러웠습니다. I가 내 미래의 노력을하지 않는 한,스택에 로컬 변수를 푸시

decrement stack pointer -> fetch value 8(%esp) -> put on stack를, 누군가가이 준수 수있는이 대신

fetch value 8(%esp) -> decrement stack pointer -> put on stack을 할 것 같다 : 그 부분에 대신 다음과 같은 순서로 작업을 수행하는 것으로 보인다 때문에 잘못된 가정에 기초 함 이것은 gcc 컴파일러에서 수행되었습니다! 감사합니다. !!

+0

그것은 온라인에 올라온 길고 혼란스러운 프로그램이었습니다.이 동작은 'pushl % eax'와 같은 것을 할 때 esp가 처음으로 감소되고 값이 푸시 됨으로 인해 이상하게 보였습니다. 그것은 제가 언급 한 첫 번째 행동을 따른 것으로 믿게되었습니다. 전체 코드를 게시 하시겠습니까? – user3769877

+0

필자가 언급 한 'pushl 8 (% esp)'을 사용하여 수행했는데, esp가 먼저 감소한 후 푸시 될 값은 가비지가됩니다 (원하는 변수가 8 (% esp)이기 때문에)하지만 값을 먼저 가져온 다음 변수를 밀어 넣으면 – user3769877

답변

1

이 코드는 x86 코드라고 가정하고 값을 가져오고 스택 포인터를 줄인 다음 값을 스택 맨 위에 놓습니다. 참고 번호 here.

+0

실제로 x86입니다. 설명해 주셔서 감사합니다. – user3769877

관련 문제