-
어셈블러의 2패스 구조전공/시스템프로그래밍 2020. 6. 8. 13:11
패스1
원시 프로그램을 돌리면서 지시어표를 통해 명령어의 주소를 결정한다.
전향 참조인 경우, 심볼이 정의되어 있지 않으므로 ? 상태가 된다.
DW(지시어)로 정의된 심볼을 정리한 심볼테이블을 만든다.
그리고 부차적인 요소이긴 하지만 임시테이블로 기계어테이블도 만들기도 한다.
패스2는 지시어표를 볼 필요없이 이 기계어테이블로 바로 주소를 볼 수 있어 효율적이다.
패스2
패스1에 의해 만들어진 심볼 테이블을 적용시켜 정의되지 않았던 심볼들의 주소를 기입한다.
즉, FIVE, FOUR와 같이 적혀진 심볼을 4, 6 등의 주소로 변경하는 것이다.
패스2 이후에 어셈블러는 링커, 로더의 재배치 작업을 위해 정보들을 알려주어야 한다.
그 중 심볼의 재배치여부가 필요하면 1, 필요없으면 0으로 값을 전달한다.
2개의 패스를 가지는 이유
사실 하나의 패스로도 어셈블러는 돌아갈 수 있다.
다만 그러기 위해서는 지시어(DW)가 코드의 최상단에 위치해있어야 한다(후향 참조).
이 경우 모든 정의를 사용하기 전에 기록해야 하므로 비효율적이다.
따라서 효율성을 위해 어셈블러는 2패스를 사용하는 것이다.
'전공 > 시스템프로그래밍' 카테고리의 다른 글
파이프라인(Pipeline) (0) 2020.06.08 바인딩(Binding), 바인딩 타임(Binding Time) (0) 2020.06.08 인텔 프로세서의 내부 구조 (1) 2020.06.08 실수를 비트로 표현하는 방법, 부동소수점 (0) 2020.06.08 SISD / SIMD / MISD / MIMD (0) 2020.06.08