반응형
int a = 1;
int b = 2;
bool isSame;
bool isDifferent;
bool isGreater;
bool isSmaller;
bool test;
int hp = 100;
bool isInvincible = true;
int main()
{
#pragma region 비교 연산
isSame = (a == b); // 둘의 값이 같은가?
isDifferent = (a != b); // 둘의 값이 다른가?
isGreater = (a >= b);
isGreater = (a > b);
isSmaller = (a <= b);
isSmaller = (a < b);
#pragma endregion
#pragma region 논리 연산
test = !isSame; // isSame의 반대값이 저장됨
// a && b -> 둘 다 1이면 1, 둘 중 하나라도 0이면 0
test = (hp <= 0 && isInvincible == false);
// a || b -> 둘 중 하나라도 1이면 1, 둘다 0이면 0
test = (hp > 0 || isInvincible == true);
#pragma endregion
}
isSame = (a == b);
1. 00BD5245 mov eax,dword ptr [a (0BDA040h)]
2. 00BD524A cmp eax,dword ptr [b (0BDA044h)]
3. 00BD5250 jne __$EncStackInitStart+32h (0BD525Eh)
4. 00BD5252 mov dword ptr [ebp-0C4h],1
5. 00BD525C jmp __$EncStackInitStart+3Ch (0BD5268h)
6. 00BD525E mov dword ptr [ebp-0C4h],0
7. 00BD5268 mov cl,byte ptr [ebp-0C4h]
8. 00BD526E mov byte ptr [isSame (0BDA149h)],cl
1. eax에 a의 값을 넣음
2. eax와 b를 비교
3.비교한 값이 서로 다르면 0BD626E(6번)로 점프
4. 값이 같으면 어딘가(enp-0C4h)에 1을 저장
5. 0BD5268 (7번)로 점프
6. 값이 다르면 어딘가(enp-0C4h)에 0을 저장
7. cl에 enp-0C4h의 값을 넣음
8. isSame에 cl의 값을 넣음
test = !isSame;
1. 00BD535F movzx eax,byte ptr [isSame (0BDA149h)]
2. 00BD5366 test eax,eax
3. 00BD5368 jne __$EncStackInitStart+14Ah (0BD5376h)
4. 00BD536A mov dword ptr [ebp-0C4h],1
5. 00BD5374 jmp __$EncStackInitStart+154h (0BD5380h)
6. 00BD5376 mov dword ptr [ebp-0C4h],0
7. 00BD5380 mov cl,byte ptr [ebp-0C4h]
8. 00BD5386 mov byte ptr [test (0BDA14Dh)],cl
1.eax에 isSame의 값을 넣음 (movzx = 왼쪽 비트들를 0으로 채움)
2. eax가 0인지 확인
3. 0이 아니면 점프 (6번으로)
4. 어딘가(dbp-0C4h)에 1을 넣음
5. 점프 (7번으로)
6. 어딘가(dbp-0C4h)에 0을 넣음
7. cl에 dbp-0C4h의 값을 넣음
8. test에 cl의 값을 넣음
test = (hp <= 0 && isInvincible == false);
1. 00BD538C cmp dword ptr [hp (0BDA048h)],0
2. 00BD5393 jg __$EncStackInitStart+180h (0BD53ACh)
3. 00BD5395 movzx eax,byte ptr [isInvincible (0BDA04Ch)]
4. 00BD539C test eax,eax
5. 00BD539E jne __$EncStackInitStart+180h (0BD53ACh)
6. 00BD53A0 mov dword ptr [ebp-0C4h],1
7. 00BD53AA jmp __$EncStackInitStart+18Ah (0BD53B6h)
8. 00BD53AC mov dword ptr [ebp-0C4h],0
9. 00BD53B6 mov cl,byte ptr [ebp-0C4h]
10. 00BD53BC mov byte ptr [test (0BDA14Dh)],cl
1. hp와 0을 비교
2. hp가 0보다 크면 8번으로 점프
3. isInvincible의 값을 eax에 넣음
4. eax가 0인지 테스트
5. 0이 아니면 8번으로 점프
6. 어딘가(edp-0C4h)에 1을 넣음
7. 9번으로 점프
8. 어딘가(edp-0C4h)에 0을 넣음
9. cl 에 (edp-0C4h의 값을 넣음
10. test에 cl의 값을 넣음
- hp가 0보다 크다는게 확인되면 뒤의 연산은 확인도 안하고 0을 내보냄
반응형
LIST
'어셈블리' 카테고리의 다른 글
어셈블리로 보는 비트연산 (0) | 2022.08.16 |
---|---|
어셈블리로 보는 산술연산 과정 (0) | 2022.08.16 |
어셈블리 함수 기초 (0) | 2022.08.11 |
어셈블리 배열과 주소 (0) | 2022.08.11 |
어셈블리 반복문 (0) | 2022.08.11 |