작성
·
163
0
&& 연산을 어셈블리어로 볼 때
결과값인 0을 바로 [test] 에 넣지 않고 ebp, cl을 거쳐간 뒤에 저장하던데 그렇게 하는 이유를 알 수 있을까요?
[ebp]를 거쳐가는것 까지는 이해가 가는데 cl을 한번 더 거치는 이유가 궁금합니다.
답변 1
1
mov 명령에서 양쪽 다 메모리 주소 접근일 수는 없습니다.
한쪽이 레지스터이고 한쪽이 메모리인 경우는 가능합니다.
mov [mem1] [mem2] << NO
mov reg, [mem] << OK
mov [mem], reg << OK
그리고 모든 연관 관계를 파악하고 직접적으로
해당 변수에 넣어주고 하면 참 좋겠지만
컴파일러라고 완벽한 코드를 만들어주진 않습니다.
그래서 이렇게 temp값을 사용하는 경우는 자주 등장합니다.