16 진수 리터럴에 대한 $ 규칙은 언제 어디서 시작 되었습니까?

Aug 16 2020

나는이 질문 이 0x흥미 롭기 위해 16 진수를 나타내는 기원에 대해 묻는 것을 발견했습니다 .

그러나 80 년대 초 8 비트 65xx 시스템에서 프로그래밍을 할 때 내가 본 모든 것은 $16 진수 (어셈블러, 모니터, 책, 잡지 등)를 나타내는 데 사용 되었습니다. 첫 번째 Amiga 1000을 구입하고 C를 배우기 시작할 때까지 0x접두사를 알고있었습니다 .

경우 0x접두사가 명확하게 앞선 8 비트의 혁명을 , 다음 (1)은 그 이유를 $이렇게 널리 채택? 그리고 그 반대, (2) 8 비트 프로그래머 전체에게 유비쿼터스가 된 이유는 왜 갑자기 떨어졌을까요? (중요하지는 않지만 코드에 주석을 달거나 죽은 나무에 낙서 할 때 여전히 사용 $합니다.)

답변

21 Raffzahn Aug 16 2020 at 12:59

짧은 대답:

Motorola는 6800에 사용했으며 MOS (6500)는 Motorola에서 상속했습니다. 결국 6500 명의 팀원이 6800 프로젝트에서 나왔기 때문에 이미 익숙해졌습니다.


긴 답변 :

0x 접두사가 분명히 8 비트 혁명보다 앞선다면

정말 그렇지 않습니다. Motorola는 $이미 1974 년 6800 에서 접두사를 사용했습니다 . Unix는 최근에야 (1973) C로 다시 작성되어 0x그 당시에 규칙 을 추가했으며 AT & T 외부에 표시되었습니다.

그렇다면 (1) $가 그렇게 널리 채택 된 이유는 무엇입니까?

모토로라의 6800/02/09 라인과 많은 저가형 마이크로 (가정용) 컴퓨터에 사용되는 MOS의 6500 시리즈 때문입니다. 특히 Acorn, Apple, Atari 및 Commodore가 제작했습니다. 당연히 이러한 머신 / CPU 용 소프트웨어를 작성하는 모든 사람은 그 표기법을 사용합니다.

나중에 Atari ST 및 Commodore Amiga 기계 라인과 함께 사용되는 68000의 인기에 의해 시행되었습니다.

그리고 반대로, (2) 8 비트 프로그래머 전체가 유비쿼터스가되면서

이제 이것은 65xx / 68xx 기반 컴퓨터 사용자에게만 해당되는 '프로세서 버블'에 크게 의존합니다. Altair (S100), Tandy TRS-80 및 전체 MSX 세계와 같은 x80 (8080, 8085, Z80) 또는 x86 기반 컴퓨터로 성장한 사람은 동의하지 않을 것입니다. H접미사가 유일한 유효한 방법이고 다른 모든 것은 매우 이국적 이라는 점에서 상당히 확고 할 것입니다. :))

왜 갑자기 떨어 졌습니까?

그렇지 않았습니다. 그것을 능가하는 세계적인 지배기구는 없습니다. 결국 접두사 (또는 접미사)를 사용하는 것은 16 진 코드에 내재되어 있지 않지만 사용되는 언어에 의해 정의됩니다. Motorola / MOS 어셈블러는 $접두사, Intel H접미사, C는 0x접두사를 원하며 다른 사람들은 16#(Ada) 또는 16r(Smalltalk) 의 더 수학적인 접두사를 다시 원합니다 .

(중요하지는 않지만 코드에 주석을 달거나 죽은 나무에 낙서 할 때 여전히 $를 사용합니다.)

그리고 다른 많은 것 (* 3)도 마찬가지입니다.

요점 : 사용하는 언어는 표기법을 정의하며 항상 그렇듯이 첫 번째는 가장 깊은 인상을 남깁니다.


접두사보다 접두사의 장점

고전 수학에서는 기수 가 숫자 뒤에 오는 접미사 표기법을 사용합니다 . 인텔이 nnnnH표기법을 따랐습니다 . 컴파일러 작성의 경우 해석 방법을 결정하기 전에 전체 단어 (상수)를 먼저 읽어야한다는 단점이 있습니다. 이것은 접미사까지 전진 한 후에 만 ​​변환 될 수 있기 때문에 전체 문자열을 보유하는 버퍼가 필요함을 의미합니다.

접두사를 사용하면 처음부터 다음 문자를 해석하는 방법이 명확합니다. 이것은 버퍼링 할 필요가 없습니다 (* 2). 이것은 파서 설계에 이점을 제공하고 어셈블러를 많이 단순화합니다. 이것은 첫 번째 부트 스트랩으로 초기 크로스 어셈블러 도구를 빠르게 생성하는 데 특히 유용했습니다.


일부 역사

  • 16 진수 표기법은 초기에는 흔하지 않았습니다. 대신, 대부분의 기계는 3 단어 크기 의 배수로 빌드 되었고 문자는 일반적으로 6 비트로 처리 되었기 때문에 8 진수가 사용되었습니다 .

  • 매우 초기에 16 진수를 제공 한 몇 안되는 기계 / 시스템 중 많은 사람들이 알파벳의 마지막 6 개 UVWXYZ(* 2) 와 같이 다양한 문자 / 기호를 사용 했으며 종종 비 연속적이었습니다.

  • IBM X'nnnn'은 1965 년에 / 360을 사용하여 접두사 문자열 형식 ( )을 도입했습니다.

  • 접두사가 0 인 8 진수를 사용하는 데이터 포인트

  • 인텔의 4004는 접미사가있는 16 진수를 사용했습니다. h

  • 인텔의 8008은 설명서와 문서에서 모두 8 진수를 사용했습니다. nnnO

  • 1973 년까지 두 어셈블러는 동일한 B / O / H 접미사를 사용하도록 만들어졌습니다.


* 1-전체 소스가 일반적으로 메모리에로드되지만 그 당시에는 RAM이 무서운 리소스였던 오늘날 몇 바이트의 버퍼를 관리하는 것이 이상 할 수 있습니다. 그 결과, 종이 테이프에서와 같이 데이터를 읽고 버퍼링없이 읽은 각 기호에 대해 직접 작업 할 수있는 알고리즘이 선호되었습니다.

최적의 어셈블러는 모든 항목을 한 번에 한 문자 씩 읽고 앞을 볼 필요없이 즉시 처리 할 수 ​​있습니다. 접두사를 사용하면이를 지원합니다.

* 2-기호가 필요할 때 엔지니어링에서 자주 사용되는 규칙.

* 3-여기 RC.SE에서는 주제에 따라 표기법을 사용하려고하므로 $65/68 용, HIntel 용 등 ... 명확한 관계가없는 경우 / 370 표기법으로 대체하겠습니다. x'nn', $처음 사용 했음에도 불구하고 내가 가장 많이 사용한 것 입니다.