Как машины интерпретируют двоичные файлы? - PullRequest
5 голосов
/ 03 марта 2012

Я просто думал, как машины интерпретируют двоичный код? Все, что я понимаю, это то, что ваш код превращен в 1 и 0, чтобы машина могла их понять, но как они это делают? Это обычный перевод текста в двоичный формат?

Ответы [ 3 ]

13 голосов
/ 03 марта 2012

Во-первых, «двоичный» не означает, что вы думаете, что он означает (любые данные на компьютере, включая текст, уже двоичные, просто то, как мы решили отображать и обрабатывать, отличается).

Во-вторых, компиляция не является простым преобразованием в забавные символы (если бы это было так, нам не понадобились бы разные компиляторы для разных языков). Чтобы действительно иметь представление о машинном коде, вам необходимо понимать архитектуру, на которую он ориентирован. Существует много компьютерных архитектур, ваш компьютер - только одна из них. Это очень широкая тема, и для ее понимания необходимо твердое понимание архитектуры компьютера.

Я покажу пример инструкции MIPS. Если вы заинтересованы, вы можете прочитать и получить некоторые реальные знания по этому вопросу, попробуйте ссылки в конце моего поста.

MIPS является популярным вводным предметом, потому что его формат инструкции является одним из наиболее удобных для восприятия. Инструкции MIPS имеют ширину 32 бита. В MIPS есть 3 вида инструкций: «R», «I» и «J». Мы посмотрим на инструкции «Я».

Когда процессор получает инструкцию (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 из них, и они идентифицируются по их номеру. Это не то же самое, что память, это внутри самого процессора.
  • немедленный является числом. Это называется потому, что номер «прямо там» в инструкции, а не в регистре или памяти.

Конкретный пример добавления немедленного к числу, хранящемуся в регистре:

001000 00001 00010 0000000000000011

В этом примере я разбил инструкцию на части, как указано выше. Значение значений следующее:

  • код операции : 001000 означает addi или «добавить немедленно».
  • rs : 00001 - это 1 в десятичном виде, поэтому эта часть инструкции сообщает процессору, что мы хотим использовать регистр 1 как rs .
  • rd : 00010 - это 2 в десятичном виде, та же идея, что и для rs.
  • немедленное : 0000000000000011 равно 3 в десятичном виде.

Инструкция addi работает следующим образом: она принимает значение, найденное в rs , и добавляет к нему значение немедленное . После этого он помещает результат в rd . Итак, когда инструкция выполнена, rd будет содержать 3 + 2 = 5.

В двух словах, компиляторы анализируют ваш текст и генерируют инструкции для целевого процессора, который делает то же самое, что вы намеревались сделать с вашей программой. Как видите, существует огромный разрыв между текстовым представлением программы, которую пишут программисты, и работоспособным машинным кодом.

Несколько полезных ресурсов по MIPS и компьютерной архитектуре:

0 голосов
/ 27 октября 2013

Думайте об этом так. У вас есть 8 выключателей питания, каждый из которых выключен (0) или включен (1). Компьютер увидит все 8 переключателей как 1. Теперь это очень похоже на кодовый замок. Каждый символ на вашей клавиатуре имеет свою комбинацию.

0 голосов
/ 03 марта 2012

Это огромная тема, о которой вы спрашиваете. Я бы порекомендовал отличную книгу Элементы вычислительных систем для краткого обзора того, как в принципе строятся компьютеры и компиляторы. За ним довольно легко следить, и упражнения делать весело. Большая часть из них доступна онлайн по предоставленной ссылке.

Этот вопрос также имеет несколько хороших ссылок на эту тему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...