저는 기계가 어떻게 바이너리 코드를 해석합니까? 내가 이해할 수있는 것은 당신의 코드가 1과 0으로 바뀌므로 기계가 그들을 이해할 수 있지만, 어떻게 할 것인가? 이진 번역에 대한 일반 텍스트입니까?기계는 어떻게 바이너리를 해석합니까?
답변
첫 번째로, "이진"은 사용자가 의미하는 바를 의미하지는 않습니다. 텍스트를 포함하여 컴퓨터의 모든 데이터는 이미 바이너리이며 표시 및 처리 방식이 다릅니다.
둘째로, 컴파일은 재미있는 캐릭터로의 간단한 변형이 아닙니다 (다른 언어의 컴파일러가 필요하지 않은 경우). 실제로 기계어 코드를 이해하려면 대상이되는 아키텍처를 이해해야합니다. 많은 컴퓨터 아키텍처가 있지만 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 비트 연산 코드로 시작하며 프로세서가 어떤 종류인지 알고 있습니다.
- rs 및 rt은 32 비트 값을 저장할 수있는 프로세서의 저장소 유형입니다. MIPS는이 중 32 개가 있으며 번호로 식별됩니다. 이것은 메모리와 같지 않으며 CPU 내부에 있습니다.
- 은 숫자입니다. 숫자는 레지스터 나 메모리가 아닌 명령어에서 "바로 그 자리"에 있기 때문에 호출됩니다.
레지스터에 저장된 번호로 즉시 추가의 구체 예이 예에서
001000 00001 00010 0000000000000011
는, I는 상기 부분으로 명령을 끊었다.
- 오피 :
001000
이addi
을 의미 또는 "즉시 추가"값의 의미는 다음과 같다. - RS :
00001
소수점에서1
, 그래서 명령의이 부분은 우리가 1 로 RS를 등록 사용할 프로세서를 알려줍니다. - rd :
00010
은 rs와 마찬가지로 10 진수로2
입니다. - 즉각 :
0000000000000011
은 십진수로3
입니다.
addi
명령은 다음과 같이 작동합니다 : 그것은 RS에있는 값을 취하고 그것에 즉시 값을 추가합니다. 그런 다음 결과를 rd에 넣습니다. 따라서 명령이 완료되면 rd에 3 + 2 = 5가 포함됩니다.
간단히 말해서 컴파일러는 텍스트를 구문 분석하고 프로그램과 동일한 작업을 수행하는 대상 프로세서에 대한 지침을 생성합니다. 보시다시피 프로그래머가 작성하는 프로그램의 텍스트 표현과 실행 가능한 시스템 코드 사이에 큰 격차가 있습니다.
당신이 묻고있는 것은 거대한 주제입니다. 컴퓨터와 컴파일러가 어떻게 구성되는지에 대한 개요는 우수 도서 The elements of computing systems을 추천합니다. 따라하기 쉽고 운동은 재미 있습니다. 그것의 대부분은 제공된 링크에서 온라인으로 이용 가능합니다.
This question에는 주제에 대한 몇 개의 좋은 링크가 있습니다.
생각해으로 재생할 수 있습니다 : MIPS와 컴퓨터 아키텍처에
몇 가지 유용한 리소스 이 방법. 각 스위치에는 꺼짐 (0) 또는 켜짐 (1)이있는 8 개의 전원 스위치가 있습니다. 컴퓨터에는 8 개의 스위치가 모두 1로 표시됩니다. 이제 조합 잠금과 매우 유사합니다. 키보드의 각 기호는 조합되어 있습니다.
- 1. PHP로 XML을 어떻게 해석합니까?
- 2. shootout.alioth.debian.org에서 어떻게 결과를 해석합니까?
- 3. 설계시 어셈블리를 어떻게 해석합니까?
- 4. Drupal URL은 어떻게 해석합니까?
- 5. Spring은 뷰를 어떻게 해석합니까?
- 6. 자바 어셈블리를 어떻게 해석합니까?
- 7. NSDateFormatter로 날짜를 어떻게 해석합니까?
- 8. Clojure는 어떻게 이름을 해석합니까?
- 9. 컴파일러에서 함수를 어떻게 해석합니까?
- 10. Javadoc의이 비트를 어떻게 해석합니까?
- 11. sharepoint가 feature.xml 파일을 어떻게 해석합니까?
- 12. 이 C++ 코드는 어떻게 해석합니까?
- 13. 어떻게 해석합니까? /glow.min.js?v=5
- 14. Mathematica에서 음수 레벨을 어떻게 해석합니까?
- 15. Path to Dependency는 어떻게 해석합니까?
- 16. 기계는 파이썬에서 체커를 배우는가?
- 17. autotools로 바이너리를 어떻게 설치합니까?
- 18. 튜링 기계는 '시간'개념을 갖고 있습니까?
- 19. VB.NET에서 리터럴 바이너리를 어떻게 입력합니까?
- 20. 알고리즘 작성 지침에서 무차별 대항력을 어떻게 해석합니까?
- 21. Java를 사용하여 일반적인 규칙을 어떻게 해석합니까?
- 22. 브라우저는 어떻게 JavaScript 코드를 구문 분석하고 해석합니까?
- 23. Math.Acos()가 잘못된 입력을보고하는 상황을 어떻게 해석합니까?
- 24. Perl 소켓은 Linux에서 호스트 이름을 어떻게 해석합니까?
- 25. ANTS 메모리 프로파일 러의 결과를 어떻게 해석합니까?
- 26. "http : /"로 시작하는 HREF를 브라우저가 어떻게 해석합니까?
- 27. posix_ipc :: MessageQueue :: receive()의 반환을 어떻게 해석합니까?
- 28. 여기에 어떻게 해석합니까 (어설 션)합니까?
- 29. Java는 어떻게 000과 같은 숫자를 해석합니까?
- 30. FullCalendar는 Google 캘린더의 반복 일정을 어떻게 해석합니까?