학습 어셈블리 외에도 C와 같은 저수준 언어가 어떻게 컴파일되는지 배우는 것이 매우 가치 있다고 생각합니다. 내 대답은 그렇습니다.하지만 저수준 프로그래밍을 즐기기 때문에 아마도 편향적입니다.
예를 들어, 간단한 문장이 어떻게 컴파일되는지 이해하십시오. 다음 기능
int func(int val)
{
int num = val * 5;
return num;
}
... (최소한 흥미로운 부분이 됨) :
movl %edi, -20(%rbp)
movl -20(%rbp), %edx
movl %edx, %eax
sall $2, %eax
addl %edx, %eax
이 코드는 스택 (val, 매개 변수를 func으로)에서 인수를 가져 와서 왼쪽 2 자리 (2 ^ 2 또는 4를 곱한 값)만큼 이동 한 다음 원래 값을 결과에 추가합니다. 최종 결과는 5를 곱한 것입니다. 이와 같은 예는 컴파일러 최적화와 같이 알아야 할 많은 사항을 보여줍니다. 직접 5를 곱하는 명령어를 호출하는 대신 두 자리를 4로 곱한 다음 원래 값을 더합니다. 더 낮은 수준에서 사물에 대한 이해를 크게 향상시키기 위해 이와 같은 예를 찾았습니다.
-S
옵션을 사용하여 gcc에서 어셈블러 출력을 생성하십시오 . 그러나 결과는 컴파일러 및 최적화 수준에 따라 달라질 수 있습니다.
어쨌든, 나는 어셈블리 언어 프로그래머 가 어셈블리 를 이해 하는 것과 같지 않다고 생각 합니다. 다시 한 번 C와 같은 언어로 프로그래밍하고 그것이 어떻게 기계 코드에 삽입되는지를 아는 것이 귀중한 방법이라고 생각합니다.