- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
마지막 예제의 29분 40초 경
bool isEven = ((count % 2) == 0); 이라는 라인을 입력하게 되는데,
이렇게 되면 루프가 돌 때마다 변수의 값을 변경하는게 아닌,
isEven이라는 변수를 매번 선언하게 되는 것처럼 보입니다.
이 경우 별다른 문제는 없는 것인가요?
추가로 질문이 더 있는데, 이 부분을 디스어셈블리로 봤을 경우
마치 분기문처럼 어셈블리어가 이루어져 있더라구요. 이 부분은 ((count % 2) == 0)처럼 비교를 하는 부분이 있기 때문에 이해가 가는데,
중간에 dec와 or, inc가 나오는 라인은 왜 그런 것인지 이해가 되지 않습니다.
나머지를 구하는 연산의 경우 div 명령어를 사용하여 dx 레지스터에 저장된 나머지값을 가져오면 되는 것으로 이해하고 있습니다. 그렇게 하지 않는 것은 해당 컴파일러의 특성처럼 이해해도 될 것 같은데, 그것 외에 그냥 해당 instruction 자체가 이해가 가지 않아서, 이해를 돕고자 질문드립니다.
해당 어셈블리 부분 첨부합니다.
bool isEven = ((count % 2) == 0);
006924D0mov eax,dword ptr [ebp-44h]
006924D3 and eax,80000001h
006924D8 jns std::_Narrow_char_traits<char,int>::length+0Fh (06924DFh)
006924DA dec eax
006924DB or eax,0FFFFFFFEh
006924DE inc eax
006924DF test eax,eax
006924E1 jne std::_Narrow_char_traits<char,int>::length+1Fh (06924EFh)
006924E3 mov dword ptr [ebp-118h],1
006924ED jmp std::_Narrow_char_traits<char,int>::length+29h (06924F9h)
006924EF mov dword ptr [ebp-118h],0
006924F9 mov cl,byte ptr [ebp-118h]
006924FF mov byte ptr [ebp-4Dh],cl