Подтвердить что ты не робот

Разница между машинным языком, двоичным кодом и двоичным файлом

Я изучаю программирование, и во многих источниках я вижу понятия: "машинный язык", "двоичный код" и "двоичный файл". Различие между этими тремя неясно для меня, потому что, согласно моему пониманию, машинный язык означает необработанный язык, который может понять компьютер, то есть последовательности из 0 и 1 сек.

Теперь, если машинный язык - это последовательность из 0s и 1s, а двоичный код - также последовательность из 0s и 1s, тогда машинный язык = двоичный код?

Как насчет бинарного файла? Что такое бинарный файл? Для меня слово "двоичный файл" означает файл, который состоит из двоичного кода. Так, например, если мой файл был:

010010101010010
010010100110100
010101100111010
010101010101011
010101010100101
010101010010111

Будет ли это бинарный файл? Если я использую бинарный файл google и смотрю Wikipedia Я вижу этот пример двоичного файла, который меня смущает (он не в двоичном формате... )

Hex image

Где мое замешательство? Я смешиваю кодировку файлов здесь или что? Если бы я попросил SHOW показать мне, что такое машинный язык, двоичный код и двоичный файл, какими они будут? =) Полагаю, это различие слишком абстрактно для меня.

Thnx за любую помощь! =)

ОБНОВЛЕНИЕ:

В Python, например, есть одна фраза в файле ввода/вывода tutorial, чего я не понимаю: Открывает файл для чтения только в двоичном формате. Что означает чтение файла в двоичном формате?

4b9b3361

Ответ 1

Машинный код и двоичные файлы одинаковы - система с базой 2 - либо 1, либо 0. Но машинный код также может быть выражен в шестнадцатеричном формате (шестнадцатеричный) - система номеров с базой 16. Двоичная система и гекс очень взаимосвязаны друг с другом, ее легко конвертировать из двоичного в шестнадцатеричный и преобразовывать обратно из шестнадцатеричного в двоичный. И поскольку hex гораздо читабельнее и полезнее двоичного, он часто используется и отображается. Например, на картинке выше в вашем вопросе -us hex-numbers!

Скажем, у вас есть двоичная последовательность 1001111000001010 - ее можно легко преобразовать в гекс, группируя в блоки - каждый блок состоит из четырех бит.

 1001 1110 0000 1010 => 9  14 0 10 which in hex becomes: 9E0A. 

Можно согласиться с тем, что 9E0A намного читабельнее, чем двоичный - и hex - это то, что вы видите на изображении.

Ответ 2

Я искренне удивлен, не увидев информацию, которую я искал, оглядываясь назад, хотя, я думаю, название этой темы не совсем соответствует вопросу, о котором спрашивал OP.

Вы, ребята, все говорите: "Машинный код - это куча чисел".

Конечно, "КОД" - это куча чисел, но то, что люди задаются вопросом (я предполагаю), "что на самом деле происходит физически?"

Я довольно новичок, когда дело доходит до программирования, но я достаточно понимаю, чтобы чувствовать себя уверенно в том, чтобы "грубо" ответить на этот вопрос.

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

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

Итак, для 010101 закрыты 3 затвора напряжения (0), 3 открыты (1)

Я знаю, что я близко к правильному ответу здесь, но я также знаю, что это намного сложнее, потому что я могу представить то, что не знаю.

010101 было бы легкими инструкциями для простой схемы, но я не могу понять, как сложный компьютер обрабатывает всю информацию.

Итак, я думаю, пусть это сломается?

x-Bit-процессоры сообщают, сколько бит процессор может обрабатывать сразу.

Бит равен 1 или 0, "On" или "Выкл.", "Открыть" или "Закрыто"

поэтому 32-разрядные процессоры обрабатывают "10101010 10101010 10101010 10101010" - это много бит сразу.

Процессор представляет собой "интегральную схему", которая похожа на компактную печатную плату, содержащую резисторы/конденсаторы/транзисторы и некоторую память. Я не уверен, что процессоры имеют резисторы, но я знаю, что вы обычно найдете тонну из них, расположенную вокруг фактического процессора на плате

В любом случае транзистор является коммутатором, поэтому, если он получает 1, он отправляет ток в одном направлении, или если он получает 0, он будет отправлять ток в другом направлении... (или что-то в этом роде)

Итак, я предполагаю, что по мере того, как машинный код переходит... сегмент кода, который получает процессор, изменяет каналы напряжения таким образом, что он посылает сигнал другой части компьютера (почему, по вашему мнению, процессоры имеют так много контактов?), возможно, еще одна интегральная схема, более специализированная для конкретной задачи. Затем эта интегральная схема получает кусок кода, скажем, от 2 до 4 бит 01 или 1100 или что-то еще, что дополнительно определяет, где будет конечный пункт назначения сигнала, который может быть прямо назад к процессору или, возможно, к некоторому выходу устройство.

Машинный код - очень эффективный способ захвата цепи и подключения ее к лампочке, а затем снятие этой лампочки из схемы и переключение схемы на другую лампочку

Память в компьютере крайне необходима, потому что в противном случае, чтобы заставить компьютер что-либо делать, вам нужно будет напечатать все (в машинный код). Вместо этого все 1 и 0 хранятся внутри некоторого устройства хранения, либо вращающийся жесткий диск с магнитным головным штырем, который "читает" 1 или 0 на основе заряда диска, или устройство флэш-памяти, которое использует ряд транзисторы, где посылают напряжение через elitsits 1 и 0 (я не совсем понимаю, как работает флеш-память)

К счастью, кто-то потратил время, чтобы придумать другую систему базовых номеров для программирования (hex) и способ скомпилировать эти числа (перевести их) обратно в двоичные. И тогда все программные программы отделились оттуда.

Каждая клавиша на клавиатуре создает конкретный сигнал в двоичном формате, который преобразуется в куча переключателей, которые включаются или выключаются с использованием определенных напряжений, так что ток может запускаться через определенные отдельные пиксели на вашем экране, которые создают "1" или "0" или "F", или все символы этого сообщения.

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

Кроме того, я действительно не понимаю, как 0 "читается" компьютером. Кажется, что "0" не должно быть "недостатком напряжения", скорее, это должен быть какой-то другой тип сигнала Где, возможно, что-то вроде 1 вольт = 1 и 0,5 вольта = 0. Некоторая отличительная разница между токами в цепи, которая все равно будет посылать сигнал, но может быть разницей между открытием и закрытием конкретной схемы.

Если я почти вплотную отношусь к этому, серьезному подходу к компьютерным инженерам мира, уровень изощренности - это аппетит. Я надеюсь, что когда-нибудь узнаю все о технологиях. На данный момент я просто пытаюсь пройти через ардуино.

Наконец... что-то, о чем я задавался вопросом... возможно ли даже программировать компьютеры сегодня без использования другого компьютера?

Ответ 3

Вам нужно понять, как компьютер работает в своих основных принципах, и это поможет вам разобраться... Поэтому я рекомендую читать такие вещи, как Neumann Архитектура

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

Ваша программа запускается в определенном месте в вашей памяти и читает первый номер...

поэтому здесь возникает завихрение: эти числа могут быть инструкциями или данными. Ваш процессор считывает эти цифры и интерпретирует их как инструкции

Пример: начальный адрес 0

in 0 - это команда типа "читать значение из адреса 120 в ALU (Math-Unit)

тогда он выполняет шаги 1

"считывает значение из адреса 121 в ALU"

то он выполняет шаги 2

"вычесть числа в ALU"

то он выполняет шаги 3

", если значение ALU меньше нуля, перейдите к адресу 10"

он не меньше нуля, поэтому он выполняет шаги 4

"перейти к адресу 20"

вы видите, что это базовое, если (a < b)

Вы можете написать эти инструкции как цифры, и их можно запустить вашим процессором, но поскольку никто не хочет выполнять эту работу (это было то, что они сделали с перфокартами в 60-х годах) ассемблер был изобретен... это выглядит так:

добавить 10, 11, 20//загрузить var с адреса 10 и 11; добавить и сохранить в адрес 20

В заключение:

Ассемблер (инструкции процессора) можно назвать двоичным, поскольку он хранится в простых числах

Но все остальное может быть двоичным файлом.

В действительности, если у вас есть простой .exe файл, он будет... Если у вас есть переменные, такие как a = 10 и b = 20, эти значения могут быть сохранены где-то между if clauses и для циклов... Это зависит от компилятора, где он помещает эти

Но если у вас сложная трехмерная модель, она может храниться в отдельном файле без исполняемого кода...

Надеюсь, это поможет немного разобраться.

Ответ 4

Машинный язык - это низкоуровневый язык программирования, который обычно состоит из чисел. Поскольку они всего лишь цифры, их можно просматривать в двоичном, восьмеричном, десятичном, шестнадцатеричном или любом другом виде. Dave4723 дал более подробное объяснение в своем ответе.

Двоичный код - это в основном любая информация, представленная последовательностью из 1s и 0s.

A двоичный файл - это любой нетекстовый файл; например a .exe, a .png, a .html и т.д.