페이징시 어셈블리 pop오류 질문입니다.

익명 사용자의 이미지

가상메모리가 0xC0000000(3GB)에서 시작하는 OS에서
cr0레지스터를 바꿔서 페이징을 불가능하게 만드려고 합니다.
실행 마지막에 pop ebp에서 push 한 ebp가 아닌 쓰레기 값이 호출되어 프로그램이 정지하는데,
페이징이 불가능하게 된 후, 가상메모리주소의 ebp를 사용하려고 그러는 게 아닐까 싶습니다.
cr0레지스터 쓰기함수(write_cr0)를 고치지 않고 프로그램이 제대로 돌아가도록 할 수는 없을까요?

File attachments: 
첨부파일 크기
Image icon 메모리.JPG110.59 KB
meobius의 이미지

좀 더 깔끔한 방법이 있었으면 좋았겠지만 일단
인라인 어셈블리로 미리 해당하는 레지스터들을 바꾸어 해결했습니다.