2012-03-07 3 views
1

나는 우연히 여기에서 끝났다 : http://altdevblogaday.com/2011/11/09/a-low-level-curriculum-for-c-and-c/, 그리고 지금까지 읽은 것들 중 가장 유익한 컬렉션 중 하나가 밝혀졌다. 어셈블리가 프로세서에 의해 직접 실행될 수있는 저수준 언어라는 것을 알았지 만 각 프로세서에는 자체 어셈블리가 있습니다.어셈블리에 대한 일반 정보

질문 :

  • 이 사실인가요?
  • 내 넷북과 내 PC에서 기본 어셈블리를 실행할 수 있습니까?
  • AVR (RISC 아키텍처를 사용하는 사람)과 CISC를 사용하는 x86 프로세서 (사용하는 명령어 세트) 간의 유일한 차이점은 무엇입니까?
  • 어셈블리 코드를 어떻게 실행하고 어떤 파일을 저장합니까?
+1

"정상 프로세서"같은 것은 없습니다. 데스크톱 시스템에서 가장 많이 사용되는 x86 *을 의미할까요? – delnan

+1

어셈블리 = 해당 언어. 어셈블러 = 컴파일러. – vulkanino

+0

@delnan, 네, 그건 제가 의미했던 것입니다. 나는 지금 질문을 편집 ... – corazza

답변

1
  1. 예. 동일한 패밀리의 두 프로세서가 다른 어셈블리 언어를 가질 수 있지만 실제로 한 언어는 확장자이 될 수 있습니다. 때때로 다른 제조업체의 프로세서 (예 : Intel 및 AMD)가 많은 명령어 세트를 공유합니다. 게다가, 어셈블리 언어가 방대한 수의에도 불구하고, 그들은 모두 상대적으로 적은 수의 기본 개념을 공유합니다. 하나의 어셈블리 언어로 프로그래밍하는 법을 배우면 두 번째 학습은 대개 더 쉬운 작업입니다. 물론이 규칙에는 예외가 있습니다. 예를 들어 Harvard 아키텍처를 따르는 CPU 어셈블리를 학습하는 것은 두 번째 Von Neumann 어셈블리를 학습하는 것보다 약간 까다 롭습니다. RISC와 CISC 사이를 전환하면 문제가 발생할 수도 있습니다.
  2. 다릅니다. PC와 넷북에 동일한 제품군의 CPU가있는 경우 운이 좋을 수 있습니다. 하지만 어셈블리 언어 프로그램을 실행할 수있는 명령어 이상의 것이 있습니다. 운영 체제 역시 중요합니다. 예를 들어 Linux와 Windows는 동일한 형식의 실행 파일을 공유하지 않습니다.
  3. 명령어 세트보다 하드웨어에 더 많은 부분이 있습니다. 매우 다른 하드웨어를 사용하는 동일한 명령어 세트를 가진 CPU가 있습니다. 전형적인 예는 8088 대 8086입니다. 명령 세트는 동일하지만 외부 데이터 버스의 너비 때문에 하드웨어가 근본적으로 다릅니다.
  4. C 프로그램을 작성하는 것과 같은 방법으로 먼저 어셈블리 코드를 컴파일하여 실행합니다. .asm은 어셈블리 프로그램의 일반적인 확장이지만 일반적인 규칙이 아닙니다. 컴파일러 관련 확장을 사용하여 C/C++ 파일에 어셈블리를 포함시킬 수도 있습니다.
2

각 프로세서 아키텍처에는 고유 한 어셈블리 언어가 있습니다. 이는 자체 지침 세트를 의미합니다. 대부분의 명령어 세트는 합리적으로 비슷하므로, 그 중 하나를 학습하면 다른 아키텍처에서 계속 발생하는 것을 파악할 수있는 기회를 갖게됩니다. 넷북과 PC가 모두 86 일 경우 거의 동일합니다.

어셈블리를 시험하는 가장 쉬운 방법은 C 프로그램에 어셈블리 코드를 약간 포함시키는 것입니다. 이를 "인라인 어셈블리"라고합니다 (Google 검색을 통해 몇 가지 예를 찾을 수 있습니다). 이렇게하면 C 프로그램이 입출력과 같은 상위 수준의 작업을 수행하고 어셈블리가 해당 데이터로 계산을 수행하게 할 수 있습니다.

2

각 프로세서 제품군에는 고유 한 명령어 세트가 있습니다.

두 가지 (또는 그 이상) 다른 명령어 세트에서 입력을 변환 할 수있는 일부 어셈블러가 있습니다. 예를 들면 Google의 "테이블 기반 어셈블러"가 있습니다. 이들은 일반적으로 작업하는 모든 프로세서에서 유사한 구문을 사용합니다. 프로세서와 관련하여 "고유 한"어셈블러 (예 : 프로세서 공급 업체가 제공하는 어셈블러)와는 조금씩 다를 수 있습니다.

마찬가지로, 두 가지 (또는 그 이상) 다른 어셈블러가 널리 사용되는 프로세서가 있으며 때로는 완전히 다른 구문을 사용합니다. 분명한 예로 x86 프로세서에서 Intel 구문과 AT & T 구문이 공통으로 사용됩니다.

프로그래밍 관점에서 볼 때 프로세서의 명령어 세트와 사용 가능한 레지스터는 거의 모든 프로세서에서 볼 수 있습니다. 둘 다 프로세서 간 (근본적으로) 다릅니다.

어셈블리 언어로 작성된 코드는 일반적으로 소스 파일에 저장됩니다. 확장자는 어셈블러에 따라 다릅니다 (예 : ".asm"또는 ".S"). 당신은 더 높은 수준의 언어로 작성된 코드를 컴파일하는 것처럼 어셈블합니다. 그러면 오브젝트 파일이 생성됩니다. 거기에서 다른 모든 오브젝트 파일과 마찬가지로 실행 파일을 생성하도록 링크합니다.