int a = 100;
0041136E mov dword ptr [a],64h
변수 a의 주소에 100을 대입한다.
++a;
00411375 mov eax,dword ptr [a]
00411378 add eax,1
0041137B mov dword ptr [a],eax
변수 a의 값을 레지스터 eax로 읽어와 1을 더한 후, 결과값을 다시 변수 a에 저장한다.
if (a < 0)
0041137E jns main+3Bh (41138Bh)
SF비트가 0이 아니면(1이면) 명령어 주소 0x41138B로 점프한다. -> 다음 else if 문으로 점프
{
--a;
00411380 mov eax,dword ptr [a]
00411383 sub eax,1
00411386 mov dword ptr [a],eax
00411389 jmp main+55h (4113A5h)
변수 a의 값을 eax로 옮겨와서 1을 빼준후, 그 결과값을 다시 변수 a의 주소로 옮겨준다.
연산을 모두 다 마치고 if-else문 밖으로 무조건 분기한다.(0x4113A5)
}
else if (a == 0)
0041138B cmp dword ptr [a],0
0041138F jne main+4Ch (41139Ch)
a의 값과 0이 같은지 비교한다.
만약 두 값이 같지 않으면(jump not equal) 0x41139C, 즉 else{}절로 분기한다.
jnz를 사용하려면 앞에서 a의 값을 체크할 때 Zero Flag가 0이 되었는지 여부를 알아야 하지만,
이미 eax를 이용한 연산이 이루어졌을 가능성이 있으므로 cmp 명령어를 사용한 것으로 보인다.
{
a = a + 2;
00411391 mov eax,dword ptr [a]
00411394 add eax,2
00411397 mov dword ptr [a],eax
a == 0 이라면 위의 명령문을 실행하는데, a의 값을 eax에 옮겨와 2를 더한 후,
다시 메모리의 a의 주소에 결과값을 대입시켜준다.
}
else
0041139A jmp main+55h (4113A5h)
위의 두 조건과 else도 아니라면 if-else 구문을 벗어난다(0x4113A5)
{
++a;
0041139C mov eax,dword ptr [a]
0041139F add eax,1
004113A2 mov dword ptr [a],eax
a의 값을 eax로 옮겨와서 1을 증가시킨 후 결과값을 다시 a에 대입시킨다.
}
a = a + 100;
004113A5 mov eax,dword ptr [a]
004113A8 add eax,64h
004113AB mov dword ptr [a],eax
a의 값을 eax로 옮겨와 100을 더해준 후 다시 결과값을 a에 대입한다.
return 0;
004113AE xor eax,eax
}
'코스웨어 > 13년 스마트컨트롤러' 카테고리의 다른 글
9월3일 어셈블리(숙제) (0) | 2013.09.04 |
---|---|
어셈블리어 과제 (Conditional Jump) (0) | 2013.09.04 |
switch 문 분석하기 (0) | 2013.09.04 |
어셈블리 숙제 조유진 (0) | 2013.09.04 |
jns와 jnz 소스분석 - 문예진 (1) | 2013.09.04 |
9월2일자 ASM 숙제 (0) | 2013.09.04 |
Group 파일 분석 [문남경] (0) | 2013.09.04 |
ASSEMBLY - jmp 명령어, group 파일 분석 - 전영기 (0) | 2013.09.04 |