우리는 하드웨어가 컴파일 된 이진 코드만을 볼 때 프로그램이 어떤 언어로 작성되었는지는 신경 쓰지 않는다고하지만 종종 이것이 사실은 아닙니다. 예를 들어 겸손한 Z80을 생각해보십시오. 8080 명령어 세트의 확장 기능에는 CPIR과 같은 명령어가 포함되어 있습니다. CPIR은 C 스타일 (NULL로 끝나는) 문자열을 스캔하는 데 유용합니다 (예 : 수행) strlen()
. 설계자는 C 길이의 프로그램이 Pascal과 달리 (길이가 헤더에있는) C 프로그램이 설계에 사용될 가능성이 있음을 식별해야합니다. 또 다른 고전적인 예는 Lisp Machine 입니다.
다른 예는 무엇입니까? 예를 들어 특정 프로세서가 특정 언어의 규칙을 선호하게 만드는 명령어, 레지스터의 수 및 유형 , 주소 지정 모드? 나는 특히 같은 가족의 개정에 관심이 있습니다.
sizeof(int)
1 과 같은 모든 구현 은 형식의 모든 값을 보유 할 수 있어야 char
하므로 형식 을 서명 int
해야합니다 char
. 나는 기계에 대한 코드를 작성 곳했습니다 char
및 int
16 비트 부호 모두 정수; 가장 큰 어려움은 형식 변환에 공용체를 사용할 수 없으며 많은 바이트를 효율적으로 저장하려면 수동 포장 및 포장 풀기가 필요하다는 것입니다. 이러한 문제는 C에서 sizeof (int) == sizeof (long) 일 가능성에 비해 사소합니다.
unsigned int
값 의 차이를 견딜 수있는 표준 유형이 없음을 의미 합니다. C99는 이러한 상황을 개선했지만 C99 이전에는 음의 값을 유형의 값과 비교할 수있는 안전한 단일 단계 방법 unsigned int
이 없었습니다 (비교하기 전에 숫자가 음수인지 테스트해야 함).