2008-11-05 3 views

답변

38

Machine code. 프로그래머가 1과 0의 바이너리로 코딩 할 때가되었습니다. 헥스는 이것에 대한 진전으로 여겨졌습니다. 그것은 어셈블리 전이었고 코드의 이름을 사용하고 명령어의 일부를 해당 부분으로 분리합니다.

+5

기계 코드는 어셈블리의 직접적인 번역이므로, 그 아래에 있다고 말할 수는 없습니다. – Marius

+5

@marius, 내 컴퓨터에서 기계 코드를 실행할 수는 있지만 어셈블리는 실행할 수 없습니다. 그래서 그것은 평등하지 않습니다;). – Dykam

+5

요즘 첨단 어셈블러 프로그램이 할 수있는 일이 무엇인지 모르겠지만, 올덴 데이 (Olden Days)에서는 매크로 어셈블러가 자동으로 많은 것들을 자동으로 처리 할 수 ​​있습니다 (함수 엔트리, 인수 카운트 추적, 자동 할당, 조건부 매크로 확장 및 수동으로 할 일이 다른 Neat Stuff). 그래서 저는 기계 코드가 타트 (taht) 이유 때문에 어셈블리보다 "낮습니다"라고 말하고 싶습니다. – Vatine

2

글쎄, 당신은 항상 바이너리 (또는 16 진수, 또는 다른 표현)로 코드를 작성할 수 있습니다. 그런 다음 점프 오프셋 등을 계산해야합니다. 권장하지 않습니다. ;의)

+0

나는 이것을 6502와 함께했다. 그러나 16 진수 코드를 입력하는 것이 언어로 간주 될 수 있다고 생각하지 않는다 ... 나는 16 진수와 이야기한다! :-) –

2

정렬. 기계는 어셈블리를 읽지 않으며 어셈블리가 변환되는 "기계 언어"를 읽습니다. 기계어에는 어셈블리의 니모닉 대신 "opcode"가 있으며 일반적으로이 opcode는 바이너리 데이터입니다. 기계어 코드는 일반적으로 사람이 읽을 수있는 것으로 간주되지 않습니다.

RISC 시스템에서 시스템 코드는 종종 어셈블리의 직접적인 변환이지만 x86 시스템에서는 특히 두 시스템이 상당히 다릅니다.

+1

사실, x86에서도 똑바로 번역되었습니다. 다른 예가 있습니까? –

70

실제로 코드 아래에 Microcode이라는 코드가 있습니다.

+0

마이크로 코드를 기계 코드라고 생각합니다. RAM에서 실행되는 것이 아니라 프로세서에있는 다른 변형입니다. –

+20

마이크로 코드는 각 비트가 일부 내부 회로를 토글하는 데 사용되는 ROM 블록입니다. '단어'의 순서는 CPU가 단일 기계 언어 명령을 수행하도록 안내합니다. 따라서 기계어도 '아래'에 있습니다. – Javier

+4

Javier에 동의합니다. 우리는 한 번 대학 과정의 일부로 마이크로 코드 프로세서를 만들었습니다. 아주 재미! –

2

확실한 : 어셈블리 언어 (http://en.wikipedia.org/wiki/Assembly_language)에 대한 기사에서 Wikipedia는 "특정 CPU 아키텍처를 프로그래밍하는 데 필요한 숫자 기계 코드 및 기타 상수의 상징적 표현을 구현합니다."

8

아래의 내용이 낮은 수준이면 그렇다. 기계어가 있습니다. 어셈블리는 실행되기 전에 기계어로 변환됩니다. 현대의 많은 프로세스에서 기계어는 마이크로 코드로 에뮬레이트됩니다. 마이크로 코드에 대한 자세한 내용은 this을 참조하십시오.

3

왜 묻는 지에 따라 다릅니다. 다른 방법을 통해 할 수있는 어셈블리에서는 할 수없는 것이 없습니다. 기계어 코드는 정확히 동일한 데이터를 나타내는 또 다른 표현입니다.

+2

100 % 정확하지 않습니다. 다른 방법을 통해 어셈블리를 최적화 할 수 없습니다. 나는 심지어 x * = 2를 의미한다; C++에서는 가장 효율적인 어셈블리로 컴파일되지 않을 수도 있습니다. for 루프는 cx 레지스트리 (8086)를 사용하지 않을 수도 있습니다. assebly에서만 할 수있는 일이 있습니다 ... 왜 언어로 사용되는 이유는 무엇입니까 (합계) – baash05

+2

실제로 어셈블리와 함께 할 수없는 몇 가지 사항이 있습니다. 일부 종류의 자체 수정 코드 또는 지시를 데이터로 사용하거나 그 반대의 경우 (가변 길이 명령을 가진 x86에서 ... 가능성들 ...) – Artelius

18

조립품은 기계 코드의 텍스트 표현입니다. 그것은 CPU 내에서 단일 명령을 표현하는 단일 명령문을가집니다. 예를 들어, "MOV X, Y"는 CPU를 통과하여 값 X를 위치 Y로 이동시키는 단일 명령입니다. 기계어 코드를 얻으려면 CPU에 'MOV'를 나타내는 숫자와 'X'(숫자가 아닌 경우) 및 Y를 나타내는 숫자. 이러한 원시 HEX 2 진 값은 기계 코드입니다. 이것은 CPU가 트랜지스터를 통해 전압/전류를 지시하여 그것이하는 일을하게하는 수치입니다.

기계 코드는 하위 레벨이지만 어셈블리와 매우 비슷합니다. 너무 가깝기 때문에 "MOV"명령을 읽을 수 있다는 장점 때문에 아무도 사용하지 않아도됩니다. 변수 이름은 스택이나 힙의 원시 주소가 아닌 읽을 수있게됩니다.

+5

글쎄, 많은 어셈블러들은 실제로 주소에 대한 구분을 위해 레이블을 허용합니다. 따라서 어셈블리는 기계어 코드의 텍스트 표현이 아닙니다. – Calyth

2

심지어 기계어 코드 아래에서 VHDL 칩 설계라고 할 수 있습니다. 코드를 실행하기 위해 칩을 설계 할 필요가 없어도 입력을 즉시 출력으로 변환 할 수 있습니다.

(안 나는 전문가는 아니지만 것을 - 나는 C++를 사용하고 있습니다) (

+1

그러나 칩을 만든 후에는 실제로 프로그래밍 할 수 없습니다. 그래서 나는 그것이 정말로 적절하다고 생각하지 않습니다. –

+2

이것을 FPGA에서 사용할 때 다시 프로그래밍 할 수 있습니다. 그래도 저는 전문가가 아닙니다 :) – xtofl

12

그리고 더 낮은 갈 수없는 단어 "언어"는 "기계"언어 또는 더 낮은 물리 계층에 적합한 지), 그러나 기계어 아래에는 관련된 하드웨어 (CPU)에 대한 각 바이너리 opcode를 실제로 구현하는 데 사용되는 많은 게이트와 스위치의 구성이 있습니다.이 더 낮은 레벨을 다루는 훌륭한 책은 Charles Petzold입니다. "CODE"

3

첫 번째 컴퓨터 (ENIAC)는 하드 배선을 사용하여 하나의 계산 결과를 다른 입력으로 입력 할 수있었습니다. 다른 프로그램을 실행하려면 일부 케이블의 연결을 해제하고 다른 케이블을 다시 연결해야했습니다.

3

어셈블러는 어셈블러에서 기계어 코드로 변환됩니다. 바이너리 편집기로 작성할 수 있습니다. (아!) CISC 컴퓨터는 칩 세그먼트 (ALU, 메모리 가져 오기 등)를 시퀀싱하는 마이크로 코드를 가질 수 있습니다. 일반적으로 칩 제조업체를 제외하고는 누구도 마이크로 코드를 작성하지 않습니다.

3

글쎄, 다른 사람들이 언급 한 것처럼 기계어가 있습니다. 기계어는 일반적으로 어셈블리에서 작성한 내용을 일대일로 변환하므로 어셈블리 코드와 동일한 수준의 추상화 수준입니다. 직접 작성하는 것이 훨씬 어렵습니다.

MIPS 어셈블리 언어에서 제공하는 pseudo-instructions처럼 예외가 있습니다.

도 조립/기계어 : microcode 수준 아래라고 할 수 있습니다. 현대의 로직 - 트랜지스터 예산이 그대로라면 마이크로 코드가 그 관련성을 잃어 가고있는 것 같습니다.

+3

마이크로 코드가 여전히 주위에 있습니다. 그것은 너무 어렵고 모든 것을 하드 와이어하는 "버그"입니다. – Artelius

3

어셈블리 언어는 기계어 코드가 언어가 아니기 때문에 프로그래밍 언어 건물의 하단부에 있습니다. 그 이유는 따라야 할 문법 규칙이 없기 때문입니다. 기계 코드는 마이크로 프로세서 작동을 실행하는 유일한 데이터 형식 일 수 있습니다. CPU는 메모리에서 데이터를 가져오고 가져온 기계 코드에 따라 직접 명령을 실행합니다.

그러나 Intel Pentium 4 이상의 최신 설계에서는 기계 코드가 uops 또는 마이크로 작동이라고하는 저수준 RISC 실행 단위 연산의 표현입니다. 따라서 이러한 설계의 디코딩 로직은 CISC 유형 명령어를 일반적으로보다 간단한로드/저장 유닛 인 RISC와 같은 작은 uops로 변환하는 것입니다. 이 측면에서 우리는 머신 코드가 CPU의 기본 실행 논리에 의해 기본적으로 수행되는 "실제"연산이 아닌 아키텍처의 "상위 레벨"복잡한 명령을 기술한다고 (기술적으로는 정확하지는 않지만) 말할 수 있습니다 .

우리는 아키텍처 명령어 세트 또는 건축 기계 코드와 외부 세계에 숨겨진 내부 레벨 "마이크로 명령어"세트를 가지고 있습니다. Intel 프로세서의 추적 캐시는 프로세서의 슈퍼 스칼라 성능을 최적화하기 위해 이러한 작업을 저장하도록 설계되었습니다 (CPU가 프로그램에서 실행 가능한 아키텍처 명령 세트가 아닌 uops를 실행하므로).

6

나는 당신이 얻을 수있는 가장 낮은 것이 Physics 또는 TRW (The Real World)라고 불리는 것이라고 생각합니다. 이것이 칩 설계자와 제조업체가 컴퓨터 언어를 출력하여 가치있는 것으로 전환 할 수있는 CPU 및 기타 프로세서를 만드는 데 사용하는 것입니다.

+1

서사시 ​​답. 그래도 TRW 상표권을 가지고 있어야합니다. – NlightNFotis

1

CPU에 전류를 보내고 픽셀을 어디에 둘 것인지 알려줄 수 있습니다. (거의 바이너리이지만 컴퓨터를 사용하여 작성하지 마십시오.)