1
스택 어셈블리가 x86 어셈블리에서 작동하는 방식을 이해하는 데 도움이 필요합니다. 아래의 코드 스 니펫은 내가 공부하고있는 부트 로더에서 가져온 것입니다.어셈블리 sp 및 bp 레지스터
인쇄 기능에는 세 개의 "인수"가 사용됩니다. 스택에 3을 모두 밀어 넣기 때문에,은이 0xfff9
일 것으로 예상됩니다. bp
은 인쇄 기능에서 한 번에 같은 주소를 사용합니다.
어떻게하면 [bp+2]
대신 [bp+4]
을 사용해야합니까? 내가 위치 0xfffd
, 0xfffb
및 0xfff9
에 푸시 한 변수가 아니기 때문에? 그런 다음 인쇄 기능에서 돌아 오면 인쇄하기 전에 동일한 위치로 sp를 복원하기 위해 add sp, 6
을 추가합니다.
; stack initialization
mov ax, 0x0000
mov ss, ax
mov sp, 0xffff
mov bp, 0xffff
편집는 함수 반환 주소에 대해 잊어 버렸습니다.