어셈블리 프로그래밍 - 어셈블리 언어(디버거로 레지스터 값의 변화를 확인, 문서로 작성)

1. 어셈블리 프로그래밍 - 어셈블리 언어(.hwp
2. 어셈블리 프로그래밍 - 어셈블리 언어(.pdf
어셈블리 프로그래밍 - 어셈블리 언어(디버거로 레지스터 값의 변화를 확인, 문서로 작성)
1. Q1_01
디버거로 레지스터 값의 변화를 확인, 문서로 작성

-소스 코드

INCLUDE Irvine32.inc

.code
main PROC
call MySub
exit
main ENDP

MySub PROC

push ( ) ; 에 들어갈 값 ebp
mov ebp,( ) ; 에 들어갈 값 esp
sub esp,8
mov DWORD PTR [ebp-4],20
mov DWORD PTR [ebp-8],10
mov ( ),ebp ; 에 들어갈 값 esp
pop ( ) ; 에 들어갈 값 ebp
ret
MySub ENDP

END main

-코드 설명

우선 main 프로시저부터 프로그램이 실행하면 MySub 프로시저를 호출한다. 다른 프로시저를 호출하면 stack에 return address값이 저장된다. 이제 MySub 프로시저로 넘어가서 stack에 ebp를 push한다. ebp는 base pointer로 스택에 저장하여 기존의 값을 보존하기위해 사용된다. 그 다음 esp의 값을 ebp에 복사한다. 그 다음 esp에 8을 빼주는데, 그러면 스택의 구조는 아래와 같다.

return address

ebp
[- ebp
20

10
[- esp

return address

ebp
[- ebp

[- esp

현재 esp는 스택의 빈공간을 가리키는데, 다음명령에서 [ebp-4]에 20의 값을, [ebp-8]에 10의 값을 복사하므로 스택은 위의 우측과 같이 된다. 이제 다음으로 esp가 가리키는 곳을 ebp가 가리키는 곳과 같이 설정한다. 그리고 나서 ebp레지스터를 pop하는데,

retu
....