.S 파일이란 무엇입니까?
Linux 커널, FreeBSD 커널 또는 일부 다른 프로젝트와 같은 다양한 프로젝트에서 .S 파일을 보았습니다. 이 파일의 기능은 무엇이며 대신 .C 파일을 사용할 수없는 이유는 무엇입니까?
.S
파일은 어셈블리로 작성된 소스 코드 파일입니다. 어셈블리는 매우 낮은 수준의 프로그래밍 형식입니다. 파일에는 프로세서에 대한 어셈블리 명령이 순차적으로 포함되어 있으며 일반적으로 선택한 아키텍처를 기반으로 컴파일됩니다. 이러한 파일의 예는 x86, sparc, ARM 등과 같은 특정 아키텍처의 Linux 커널에서 자주 볼 수 있습니다.
어셈블리 언어에 대한 자세한 정보 :
그것은 .S
어셈블리 언어입니다. 일반적으로
아무도 언급하지 않은 것은 왜 자본 S입니까?
.S
(대문자 S)는 여전히 전처리기를 통과해야하는 어셈블리 코드를 나타냅니다 . 즉,이 가질 수있는 의미#include
와#define
다른 매크로 중. 확장으로 볼 수도 있습니다..sx
.s
(아래쪽 s)는 객체로 컴파일 할 수있는 순수 어셈블리 코드입니다.
왜 사용하지 .c
않습니까? 글쎄, 운영 체제이기 때문에 모든 것을 C 로 작성하는 것은 불가능합니다 . 실제로 그것은 이상적 일 것이며 C 언어 자체에는 운영 체제를 만드는 데 도움이되는 배경 기록이 연결되어 있으며이를 코딩하는 데 필요한 어셈블리 양을 줄입니다. 그러나 많은 저수준 작업은 기계에 너무 의존적입니다.
다음은 사용 하는 리눅스 부팅 을 위한 메모리 복사 루틴 의 좋은 예입니다.
#include <linux/linkage.h>
* .S 파일은 어셈블리 파일입니다.
.S 및 .c 파일이 아닌 이유는 무엇입니까?
캐시 및 메모리 설정과 같은 기계 의존적 물건 / 초기 초기화는 I / O 명령과 같은 어셈블리 수준 명령 만 수행 할 수 있기 때문입니다.
커널에는 다양한 리소스의 초기 설정을 처리 할 libc 라이브러리가 없습니다. 그리고 애플리케이션 실행 중에도 하드웨어 리소스는 어셈블리 언어로 코딩 된 I / O 루틴을 호출하는 시스템 호출을 차례로 호출합니다.
.S
확장은 표시 어셈블리 언어 파일을 .
대신 .C 파일을 사용할 수없는 이유는 무엇입니까?
원시 소스 코드 (인간 입력이든 컴파일러 생성이든)는 C가 아니라 어셈블리이기 때문입니다.
그들은있는 코드 어셈블러 파일 :
어셈블리 언어는 컴퓨터, 마이크로 프로세서, 마이크로 컨트롤러 및 기타 프로그래밍 가능한 장치를위한 저수준 프로그래밍 언어로, 각 문은 단일 기계어 명령어에 해당합니다. 어셈블리 언어는 이식성이 더 높은 대부분의 고급 프로그래밍 언어와 달리 특정 컴퓨터 아키텍처에 고유합니다.
따라서 이러한 파일은 C 코드 파일과 동일하지 않습니다.
참고 C 파일이 어셈블리 명령어로 인라인 될 수 있습니다 .
.S 파일은 어셈블리 언어 파일입니다. 그것들은 기계 코드의 한 형태입니다. 낮은 수준의 프로그래밍입니다. 모든 기계 종속 코드는 어셈블리 언어로 작성됩니다. 어셈블리 언어는 프로세서마다 다릅니다.
.S 파일은 어셈블리 언어, 즉 낮은 수준의 프로그래밍으로 작성된 코드입니다. 리눅스 커널 소스 코드에서 .S는 일반적으로 리눅스 커널이 부팅을 시작할 때 커널이 실행하는 시작 파일입니다 (예 : -head.S). 현재 .C 컴파일 된 .O 파일을 실행할 준비가되지 않았기 때문에 .C가 아닌 .S로 작성합니다. 아키텍처 종속 레지스터로 작업하고 커널을 시작해야합니다.
참고 URL : https://stackoverflow.com/questions/10285410/what-are-s-files
'Programing' 카테고리의 다른 글
jQuery size () 메서드 대 길이 속성 (0) | 2020.12.08 |
---|---|
프로그램이 자바 스크립트의 변수 변경을 기다리도록하려면 어떻게해야합니까? (0) | 2020.12.08 |
Jenkins와 Maven의 차이점 (0) | 2020.12.08 |
ARC 아래의 NSString 속성은 강력해야합니까 아니면 복사해야합니까? (0) | 2020.12.08 |
셀레늄 그리드 : MaxSessions 대 MaxInstances (0) | 2020.12.08 |