섹션은 독립적 인 메모리 시퀀스입니다. 각각의 새로운 데이터 바이트는 현재 열려있는 "프로그램 섹션"에 배치됩니다. 메모리에로드 될 때 메가 바이트 또는 기가 바이트가 될 수도 있지만 관련 데이터를 소스 코드에서 아주 가깝게 유지하는 기능을 작성하는 것이 매우 편리합니다.
사용자 정의 프로그램 섹션은 표준 섹션과 동일한 방식으로 작동하지만 일반적으로 링커 및 기타 코드 후 처리 도구에 추가 정보를 제공해야 합리적인 방법으로 메모리에로드 할 수 있습니다.
데이터 섹션에 실행 가능 코드를 배치 할 수 있으며 그 반대의 경우도 있습니다. 대부분의 어셈블러는 경고도 내지 않습니다. 데이터 섹션에서 코드를 실행하면 약간의 트릭이 필요할 수 있습니다. 반대는 보통 쉽다.
어셈블러는 일반적으로 소스 코드와 동일한 순서로 객체 모듈에 해당 항목을 작성하고 유사한 섹션을 링커에 다시 배치하는 방식으로 섹션을 처리합니다. 가장 단순한 어셈블러 만이이 기능을 제공하지 않습니다. 원래의 MSDOS .COM
파일 어셈블러가 염두에두고 있습니다.
다른 어셈블러는 프로그래머를 coddling에 대한 다른 철학을 가지고 있습니다. 전통적인 기법은 어셈블리 언어 프로그래머가 자신이하는 일을 알고 있다고 가정하고 이해되지 않은 것을 제외하고는 그대로 쓰는 것입니다. 다른 어셈블러가 더 유용합니다 (또는 엉덩이의 관점, 당신의 관점에 따라 다름). 정렬되지 않은 멀티 바이트 구조, 데이터 또는 코드 유형 불일치 등에 대해 불평합니다.
"유용성 "를 사용하면 프로그램 섹션을 시작하지 않으면 기본 동작 (일반적으로 가정 된 코드 .psect)이 발생하거나 치명적인 오류로 어셈블되지 않습니다. 가장 구조화 된 어셈블러조차 텍스트, 데이터 또는 bss가 없는지 상관하지 않습니다. 실제로, 데이터 (또는 코드) 바이트가 전혀없는 심볼 정의로만 구성된 유용한 객체 모듈이 있습니다.
어셈블러가 섹션 재배치를 수행하지 않습니까? – vjain27
이러한 경우 링커가 어떻게 작동하는지 알려주시겠습니까? – vjain27
설명 주셔서 감사합니다! 내 마음 속에 아직도 남아있는 한가지는 텍스트 나 데이터 섹션이 선언되지 않았고 어셈블러가 링커가 무엇을 신경 쓰지 않는가하는 것입니다. 실행 파일에 텍스트 및 데이터 섹션이 필요하지 않습니까? – vjain27