본문 바로가기
코스웨어/12년 내장형하드웨어

어셈블리 소스입니다.

by 알 수 없는 사용자 2012. 9. 6.
728x90
반응형

.386
.MODEL    FLAT
PUBLIC    _Emb 
.CODE    
_Emb    PROC    NEAR32

    push    ebp       
    mov    ebp, esp 

    mov    esp, [ebp]    ;esp를 main ebp로 옮겨준다.
    pushad            ;스택에 레지스터 push
    mov    eax, [ebp + 4]    ;return address 값 ebx로
    push    eax        ;ip push
    pushfd            ;efl push

    mov    esp, ebp 
    pop    ebp      
    ret        
_Emb    ENDP   

END   

수정(09.08)

mov    esp, [ebp]   


이 코드는 쓰면 안되는 코드입니다.

이유는 이 코드의 경우

변수가 1개라서 스택에서 변수의 위치가 가늠이 되는데

만약 변수가 많아 지게 된다면 위의 코드는 사용할 수 없게 됩니다.

(유동적인 코드가 아니네요) ;;


mov    esp, [ebp+8]

add    esp, 40


위의 코드는 인자를 이용해서 정확하게 변수의 꼭대기로 이동한다음

인자의 크기만큼 내려가기 때문에 좀 더 유동적이 됩니다.

금요일 수업중에 생각하다가 알게 되었습니다.

또한 push는 memory to memory가 가능 하기 때문에


push    [ebp + 4]


이거 한줄만 써주면 되겠네요.

결론적으로는


mov    esp, [ebp+8]

add    esp, 40

pushad

push    [ebp + 4]

pushfd


이 5줄이면 되겠습니다.

728x90