2012-02-15 3 views
-2

저는 어셈블리 프로그래밍에 아주 새로운 제품입니다. 왜 변수의 주소가 실제 변수 대신 스택에 항상 푸시되는지 궁금합니다. 00,401,273 서브 ESP, 80H어셈블리 프로그래밍 : 함수 인수는 항상 메모리 위치입니까?

는 .text : 00,401,279 푸시 오프셋 aString1

는 .text : 00,401,270 푸시 EBP

는 .text : ESP

는 .text 00,401,271의 MOV EBP, 예를 들어

.text : 0040127E 호출 sub_401554

왜 실제 변수가 인수로 푸시되지 않았습니까?

+1

수 있습니다. 그러나 그 문자열은 4자를 초과 할 수 없으며 실용적이지 않습니다. –

답변

2

모든 "함수"인수가 반드시 참조로 전달되는 것은 아니지만 예제는 가변 크기가 스택에 적합하지 않기 때문에 참조로 전달되는 문자열입니다.

반환하기 전에 함수를 호출하고 정리하는 방법의 세부 사항은 사용자가 인터페이스 할 호출 규칙에 따라 달라집니다.

호출자가 항상 제어하는 ​​어셈블리 코드이면 스택에 짧은 인수를 전달할 수 있지만 포인터를 전달하면 더 크고 복잡한 데이터 구조를 사용할 수 있으므로 손으로 직접 처리 할 필요가있는 후보가됩니다. 코딩 된 어셈블리 최적화

+0

도움 주셔서 감사합니다 :) – user1210446

관련 문제