8월 20일 disassembly(디스어셈블리) 약간
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'에 대입한다.