블로그 이미지
송시혁

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

C코드





아래는 디스어셈블리 코드



mov 대입 '='의미. 

dword ptr [a]

dword= 4바이트.

[a]= 변수 'a'

ptr은 포인터와 비슷한 의미. 여기서는 a의 주소에 헥사값 64를 a에 대입한다.

64h =100의 헥사값. (100의 16진수)


add eax, 1

add는 '더한다'라는 명령어. 여기서는 eax에 1을 더한다는 의미. 즉, c코드로 생각하면, a=a+1

eax=eax+1이 되겠다.


++a와 a++은 어셈블리코드로 보면, 똑같다. 실제 컴파일 하는 속도는 ++a와 a++는 차이가 없다는 것을

알 수 있다.


a=b+a;

1. mov eax, dword ptr [b]= eax에 b를 대입하겠다는 의미. a와 b는 메모리 상에서 존재한다. 연산은 cpu만이

할 수 있으므로 먼저 cpu에서 메모리로부터 가져와서 임시저장공간 eax에 넣는다.


2. add eax, dword ptr[a]= eax와 a를 더한다. 당연히 cpu가 연산한다. (연산은 ALU 레지스터가 담당)

3. mov dword ptr[a], eax= eax는 지금 b+a를 연산한 결과값을 cpu가 지니고 있다. 이 결과값을 다시 메모리

    에 있는 'a'라는 변수가 있는 메모리 주소에 보낸다. 그래서 이 3번째 코드가 없다면, 연산은 하지만, 연산한 결과

값은 나타나지 않는다.

b=a;


mov eax, dword ptr[a]= 'a'라는 변수를 eax에 대입한다. 

mov dword ptr[b], eax= eax(a가 가지고 있는 값)를 메모리상에 존재하는 'b'에 대입한다.




posted by 송시혁