2014-11-25 2 views
0

Google-Books의 온라인 서적 인 Compiler Design By A.A.Puntambekar을 사용하여 COMPILER-DESIGN을 연구하면서 한 줄에 걸쳐 붙어 있습니다. 사실, 나는 내면의 세부 사항을 아는 것이 더 궁금합니다.조립 프로그램에서 저수준 기계 언어로의 변환

어셈블러는 두 번의 패스를 사용하여 어셈블리 프로그램을 하위 레벨 컴퓨터 언어로 변환합니다. 패스는 입력 프로그램의 전체 스캔을 의미합니다. 두 번째 패스의 끝은 변동 가능 머신 코드입니다.

왜 2가 변환을 거치고 어휘 분석, 구문 분석 등과 같은 단계가 포함되는데 왜 어셈블리에서 기계 코드로 변환합니까 ??? 나는 그것에 대해 매우 덜/전혀 모른다.

여기에 누군가가 그 두 개의 패스를 설명하거나 좋은 자원에게 연결하고 싶은 경우에, 나는 그에게 감사 할 줄은/그녀의

+0

이것은 프로그래밍 문제가 아닙니다. 컴퓨터가 어떻게 작동하는지 묻는 것입니다. 어쩌면 http://cs.stackexchange.com이 더 적합 할 수도 있습니다. (또한 모든 어셈블러가 2 패스 어셈블러는 아닙니다.) –

+0

어셈블리 및 기계 코드 프로그래머는 해당 웹 사이트가 아닌 여기에서 사용할 수 있습니다. 그러나, 나는 그것에 관해 또한 게시 할 것이다. 질문에 대한 도움이 필요하십니까? @ RaymondChen –

+0

@ RaymondChen- 컴퓨터가 아닌 코드 변환에 대해 묻습니다! –

답변

4

컴파일러는 오프셋에 의해 라벨을 교체해야합니다. 레이블 자체보다 이전 줄에서 레이블의 이름을 사용하면 컴파일러는 오프셋을 삽입하기 위해 프로그램을 다시 작성해야합니다.

+0

입니다. Ok, 모든 레이블이 실제 메모리 매핑 (레지스터)으로 대체되었다는 것을 의미합니다. 그런 다음 두 번째 단계에서 코드 변환이 수행됩니까? –

+2

또한 레이블과 점프 사이의 코드 크기에 따라 점프에 다른 인코딩이 필요할 수 있습니다. 일부 점프는 "긴 점프"이며 다른 점은 "짧은 점프"로 최적화 될 수 있습니다 (일부 어셈블러에서는 적어도). – geert3

+0

감사합니다. @vanUitkon. 기본 개념을 정리하는 데 도움이되었습니다. –