버전 6 Unix에서 이 TMG의 어셈블리 코드를 이해하는 방법은 무엇입니까?

버전 6 Unix에서 이 TMG의 어셈블리 코드를 이해하는 방법은 무엇입니까?

Unix의 초기 버전에는 tmg초기 컴파일러-컴파일러인 Doug McIlroy의 도구("변환기")가 포함되었습니다. TMG는 Dennis Ritchie의 어셈블리 언어와 TMGL 자체(TMG가 어셈블리 언어로 번역됨)로 구현됩니다. 이것은TMG 매뉴얼(1972).여기Unix 버전 6의 완전한 소스 코드입니다.

tmgl.s나는 McIlroy의 TMG 구현이 어떻게 작동하는지 이해하려고 노력하고 있기 때문에 TMG에서 번역한 이 파일을 읽고 있습니다 . tmgl.t나는 다음 발췌문에 혼란스러워합니다.

.1=.
1
.2=.
2
.3=.

그리고:

goto;..2
..3:null
..2:

나는 읽었다PAL-11R그리고유닉스 어셈블리수동이지만 설명이 기억나지 않습니다.

특별한:

  • ."위치 카운터"라는 뜻인데 그게 뭐죠 .3=.?
  • .."이전 카운터"라는 뜻인데, 그게 뭐죠 ..3?

(더 나쁜 것은 이 구문이 TMG 구현에서만 발견되고 Unix V6의 다른 소스 파일에서는 발견되지 않는 것 같습니다. 또한 손상된 코드 또는 단계적으로 폐지된 구문의 가능성을 배제하기 위해 TMG 소스는 실제로 다음과 같이 컴파일됩니다.Python PDP-11 에뮬레이터유닉스 V6을 실행 중입니다. )

답변1

.1, ..1특별한 의미는 없습니다. 이는 단순한 식별자(레이블, 변수 등)입니다. 선언하지 않는 한 .globl기본적으로 로컬이 됩니다.

그때도 그랬고 지금도 마찬가지다. 예를 들어, 예방 gcc하려면.정적 변수사용자 정의 기호와의 충돌을 피하십시오.

무엇인가요 .3=.?

.3이는 위치 카운터 값(현재 세그먼트 내 오프셋)이라는 로컬 기호에 할당됩니다.

관련 정보