최근 시스템 프로그래밍을 공부중인데
x86 나누기 연산은 몫과 나머지를 한 명령어로 알 수 있다고 하더라고
근데 C언어에선 한번에 얻을 수 있는 구문은 없고
N / 3; n % 3; 두번의 연산을 해야하던데
안 만든 이유가 있는거임?
언어가 복잡해지니 그냥 컴파일러가 최적화하게 만든건가
x86 나누기 연산은 몫과 나머지를 한 명령어로 알 수 있다고 하더라고
근데 C언어에선 한번에 얻을 수 있는 구문은 없고
N / 3; n % 3; 두번의 연산을 해야하던데
안 만든 이유가 있는거임?
언어가 복잡해지니 그냥 컴파일러가 최적화하게 만든건가
1바이트가 8비트인것도 표준이 아니던 시절에 만들어진 언어에 너무 많은것을 바라는거 아닐까
어셈블리어 자체가 레지스터를 결과값 담는 바구니로 쓰는데 구조상 EAX -> AX -> AH/AL 이렇게 반씩 나뉘니까 한번에 구하는게 효율적이었을거고 c부터는 굳이 그럴필요가 없어서 그런거아님? 애초에 그정도의 연산 효율보다 코드에서 프로그래머의 의도를 보여주는게 더 이득이니까
인트린식을 이럴때 쓰라고 있는거 아님? 명령어가 한두개가 아닌데
언어 자체에서 cpu의 특정한 명령어를 지정해주는 문법이 있다면 어렵게 추상화 해놓은 의미가 사라져서 그런듯. 같은 연산자도 자료형에 따라서 실행되는 명령어가 달라지고, 그게 어셈을 안쓰는 장점인건데. _div64 같은 인트린식으로 쓸수 있게 하는게 맞지. 글고 연산자 모양도 어떻게 만들어야 할지 난감함...
C언어가 만들어질때는 x86이 없었는데수우..
x86은 1978년에 나왔다 게이야...