이것은 매우 새로운 MIPS 코더의 매우 일반적인 질문이지만 C에서 MIPS로 코드를 변환 할 때 명령 수는 구현에 따라 변경되거나 항상 동일합니까? 예를 들어 다음과 같은 방정식을 사용했습니다.구현시 MIPS 명령어 카운트가 변경됩니까?
for(i=0; i<a; i++)
for(j=0; j<b; j++)
D[4*j] = i+j;
내 명령어 개수는 (4 * a) + (8 * a * b) +4입니다. 하지만 실제로 코드를 작성한 방법에 따라 변경 될 수 있습니까? 감사!
"코드"란 무엇입니까? 여기서는 C 코드 (작성 방법은 중요하지만 컴파일러가 결정하는 것이 더 중요합니다) 또는 어셈블리 (분명히 다르게 쓰면 결과가 달라집니다)입니까? – harold
코드에 의해, 나는 어셈블리를 의미하지만 특히 isa와 컴파일러에 의해 결정되는 명령 카운트의 정의를 언급하고 있습니다. 그리고 기본적으로 명령 수를 변경하는 방법이 있는지 IE에서 코드를 작성하는 방식이 다른지, 따라서 더 적은 수의 명령이 있거나 결국 더 많은 시간에 동일한 수의 명령을 수행 할 것인지 묻는 질문이있었습니다. – SN44
가끔은 단일 명령 수준에서도 가끔 달성 할 수 있습니다. 다른 지시에 의한 동일한 결과. 값을 2로 나누는 것은 DIV 또는 오른쪽으로 비트를 이동하여 수행 할 수 있으며 값 결과는 동일합니다 (그러나 시프트는 나머지를 생성하지 않습니다). C에서 가장 큰 차이점을 보는 쉬운 방법은 "디버그"빌드 대 "최적화 된"빌드의 기계 코드를 확인하는 것입니다. 어셈블리에서 프로그래머는 더 많은 것을 제어 할 수 있습니다. 일반적으로 어셈블리가 대개 inst의 1 : 1 매핑이므로 컴파일 후에 정확히 어떤 코드가 소스 코드인지 알 수 있습니다. opnode를 기계화하기위한 니모닉 (pseudo inst. 제외). – Ped7g