5

저는 기계가 어떻게 바이너리 코드를 해석합니까? 내가 이해할 수있는 것은 당신의 코드가 1과 0으로 바뀌므로 기계가 그들을 이해할 수 있지만, 어떻게 할 것인가? 이진 번역에 대한 일반 텍스트입니까?기계는 어떻게 바이너리를 해석합니까?

답변

12

첫 번째로, "이진"은 사용자가 의미하는 바를 의미하지는 않습니다. 텍스트를 포함하여 컴퓨터의 모든 데이터는 이미 바이너리이며 표시 및 처리 방식이 다릅니다.

둘째로, 컴파일은 재미있는 캐릭터로의 간단한 변형이 아닙니다 (다른 언어의 컴파일러가 필요하지 않은 경우). 실제로 기계어 코드를 이해하려면 대상이되는 아키텍처를 이해해야합니다. 많은 컴퓨터 아키텍처가 있지만 PC는 그 중 하나 일뿐입니다. 매우 광범위한 주제이며 이해해야 할 컴퓨터 아키텍처에 대한 확고한 이해가 필요합니다.

MIPS 지침의 예를 보여 드리겠습니다. 당신이 관심이 있다면, 당신은 주제에 대해 읽고 이해할 수 있습니다, 내 게시물의 끝에 링크를보십시오.

MIPS는 해당 명령어 형식이 더 소화가 잘되는 주제 중 하나이기 때문에 대중적인 소개 대상입니다. MIPS 명령어는 32 비트 폭입니다. MIPS에는 "R", "I"및 "J"의 3 가지 명령어가 있습니다. "I"지침을 살펴볼 것입니다.

프로세서가 명령 (32 비트 데이터)을 받으면이를 읽으며 처리 할 작업을 결정합니다. "나는"지침은 다음과 같이 : 다음의

|------|-----|-----|----------------| 
opcode rs rt immediate 
    6  5  5  16    (the numbers show how wide are each part) 

의미 :이가 (: 덧셈, 뺄셈, 곱셈과 많은 다른 예를 들어)입니다 명령의 종류를 알려줍니다

  • 연산 코드를. 모든 명령어 ("R"및 "J"유형 포함)는 6 비트 연산 코드로 시작하며 프로세서가 어떤 종류인지 알고 있습니다.
  • rsrt은 32 비트 값을 저장할 수있는 프로세서의 저장소 유형입니다. MIPS는이 중 32 개가 있으며 번호로 식별됩니다. 이것은 메모리와 같지 않으며 CPU 내부에 있습니다.
  • 은 숫자입니다. 숫자는 레지스터 나 메모리가 아닌 명령어에서 "바로 그 자리"에 있기 때문에 호출됩니다.

레지스터에 저장된 번호로 즉시 추가의 구체 예이 예에서

001000 00001 00010 0000000000000011 

는, I는 상기 부분으로 명령을 끊었다.

  • 오피 : 001000addi을 의미 또는 "즉시 추가"값의 의미는 다음과 같다.
  • RS : 00001 소수점에서 1, 그래서 명령의이 부분은 우리가 1 로 RS를 등록 사용할 프로세서를 알려줍니다.
  • rd : 00010은 rs와 마찬가지로 10 진수로 2입니다.
  • 즉각 : 0000000000000011은 십진수로 3입니다.

addi 명령은 다음과 같이 작동합니다 : 그것은 RS에있는 값을 취하고 그것에 즉시 값을 추가합니다. 그런 다음 결과를 rd에 넣습니다. 따라서 명령이 완료되면 rd에 3 + 2 = 5가 포함됩니다.

간단히 말해서 컴파일러는 텍스트를 구문 분석하고 프로그램과 동일한 작업을 수행하는 대상 프로세서에 대한 지침을 생성합니다. 보시다시피 프로그래머가 작성하는 프로그램의 텍스트 표현과 실행 가능한 시스템 코드 사이에 큰 격차가 있습니다.

0

당신이 묻고있는 것은 거대한 주제입니다. 컴퓨터와 컴파일러가 어떻게 구성되는지에 대한 개요는 우수 도서 The elements of computing systems을 추천합니다. 따라하기 쉽고 운동은 재미 있습니다. 그것의 대부분은 제공된 링크에서 온라인으로 이용 가능합니다.

This question에는 주제에 대한 몇 개의 좋은 링크가 있습니다.

0

생각해으로 재생할 수 있습니다 : MIPS와 컴퓨터 아키텍처에

몇 가지 유용한 리소스 이 방법. 각 스위치에는 꺼짐 (0) 또는 켜짐 (1)이있는 8 개의 전원 스위치가 있습니다. 컴퓨터에는 8 개의 스위치가 모두 1로 표시됩니다. 이제 조합 잠금과 매우 유사합니다. 키보드의 각 기호는 조합되어 있습니다.

관련 문제