2014-03-19 4 views
1

스택 어셈블리가 x86 어셈블리에서 작동하는 방식을 이해하는 데 도움이 필요합니다. 아래의 코드 스 니펫은 내가 공부하고있는 부트 로더에서 가져온 것입니다.어셈블리 sp 및 bp 레지스터

인쇄 기능에는 세 개의 "인수"가 사용됩니다. 스택에 3을 모두 밀어 넣기 때문에,은이 0xfff9 일 것으로 예상됩니다. bp은 인쇄 기능에서 한 번에 같은 주소를 사용합니다.

어떻게하면 [bp+2] 대신 [bp+4]을 사용해야합니까? 내가 위치 0xfffd, 0xfffb0xfff9에 푸시 한 변수가 아니기 때문에? 그런 다음 인쇄 기능에서 돌아 오면 인쇄하기 전에 동일한 위치로 sp를 복원하기 위해 add sp, 6을 추가합니다.

; stack initialization 
mov ax, 0x0000 
mov ss, ax 
mov sp, 0xffff 
mov bp, 0xffff 

편집는 함수 반환 주소에 대해 잊어 버렸습니다.

답변

4
BP points to where the previous BP value was pushed 
BP + 2 points to the return address pushed by `call PRINTMESSAGE` 
BP + 4 points to the last argument pushed 
and so on