2012-12-09 4 views
0

친구와 나는 어젯밤 임베디드 프로세서에 대해 이야기하고 있었고 우리는 ASM과 특정 명령어 세트에 관한 주제를 다루었습니다. 물론이 질문은 x86 프로세서에도 적용될 수 있다고 생각합니다.등록 적합성 - 100 % 필요합니까?

ASM의 레지스터에 대해 배우면서 모든 레지스터는 적어도 x86 아키텍처에서는 100 % 고유하고 특정 용도로 사용 되었음이 분명해졌습니다. 그러나 그의 일부 프로세서에 대해 이야기 할 때, 그는 그가 사용하고있는 칩 중 일부는 무엇이든 사용할 수있는 몇 가지 범용 레지스터와 지침에 의해 사용 된 레지스터가 거의 없다는 것을 알려 주었다.

그걸로 귀결 될 때, 기술적으로 등록을 사용하여 지침을 수행 할 수 없습니까? 그들은 모두 같은 크기이고, 어떤 차이가 있습니까 (스택 포인터 등)?

+0

그리고 면책 조항으로, 해킹 또는 형식이 잘못된 코드를 작성하지 않으려 고합니다. 그냥 무고한 질문입니다. – Qix

+1

나는 이것이 디지털 디자인 지식을 가진 사람이 더 잘 대답 할 것이라고 생각합니다.단일 레지스터에 대한 전용 경로를 갖는 것이 레지스터 선택보다 약간 더 효율적이지만, 솔직히 모르겠습니다. 오늘날의 x86 명령어 세트는 초기 마이크로 프로세서의 진화라고 기억해야합니다. –

답변

3

모든 레지스터는 명령어에 대한 피연산자로서 사용될 수있는 명령어 세트를 위해 EDI ESI 0, movsb 이동 될 때까지 예를 들어 loopECX을 감소시킨다. 8086은 가장 직각 디자인이 아니 었습니다. 8086 년 후 몇 년 동안 발표 된 경쟁사는 고도의 직교 설계 인 Motorola 68000이었으며 많은 프로그래머들이 그 특성을 선호했습니다.

8086 디자인 그러나 무작위로 포착되지 않은, 매우 중요한 두 가지 원칙 역할 연주 : 이전 세대, 8080

  • 호환성, 강한 목표였다. 이전 어셈블리 코드의 기계 번역을 새 프로세서에 허용 8080은 8008에 큰 영향을 받았습니다. 시장에서 받아 들여지는 새로운 아키텍처를 얻는 것은 항상 어렵습니다. 인텔은 도구 및 프로그램에 대한 투자가 고객에게 중요한 자산임을 일찌감치 인식했습니다. 아주 오랫동안 잘 해낸 목표이며 디자인이 오래 지속 된 이유입니다.

  • 프로세스 기술은 프로세서 구현에 사용할 수있는 트랜지스터 수를 확고하게 설정합니다. 8086은 29,000 개의 능동 트랜지스터 만 필요로했는데, 16 비트 프로세서의 엔지니어링 기술이 상당히 필요했습니다. 비 직교 디자인을 사용하면 많은 양의 접착제 논리를 삭제할 수 있으며, 또한 더 빠릅니다. 68000은 예산, 직교 명령 세트에 대해 다른 용도를 선택했지만 예를 들어 정렬되지 않은 주소에서 데이터가 처리 될 때 악명 높은 버스 오류 프로세서 오류가 발생하는 매우 진절머리 나는 버스 인터페이스를 사용했습니다.

1

은 모든 레지스터는 고유의 100 %와 특정 사용

거짓을 한 것으로 명백한되었다. EAX의 유일한 용도는 무엇입니까?

는 어떤 레지스터는 기술적으로 당신은 어떤 레지스터에게 당신이 좋아하는 방법을 사용할 수 있습니다 지침

을 수행하는 데 사용할 수 없습니다. 일부 명령어는 피연산자가 특정 레지스터에 결과를 반환한다는 것을 알고 있어야합니다. 이 직교호출 등

+1

나는 그가 말한 것이 x86에서 레지스터가 서로 바뀔 수 없다고 생각한다. idiv와 같은 일부 명령어에서는 결과가 EAX 및 EDX 레지스터를 사용해야합니다. 다른 명령어는 ECX 레지스터 등을 사용해야합니다. –

+0

DS는 데이터 세그먼트를 나타내고 IP는 명령어 포인터, SP 스택 포인터 등을 나타냅니다. 이들은 x86 아키텍처에서 사용됩니다. 당신은 그들과 어지럽게 할 수 있지만 무엇을 해야할지 모르면 실제로는 안된다. – SomeWittyUsername

+0

@icepack 나는 그것의 요지라고 생각한다. 예 :-) – cnicutar