Invest-currency.ru

Как обезопасить себя в кризис?
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Двоичный язык программирования

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

13 jjepsuomi [2014-02-05 11:05:00]

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

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

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

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

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

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

ОБНОВЛЕНИЕ:

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

4 ответа

15 Решение Björn Hallström [2014-02-05 16:09:00]

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

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

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

Я искренне удивлен, не увидев информацию, которую я искал, оглядываясь назад, хотя, я думаю, название этой темы не совсем соответствует вопросу, о котором спрашивал 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 Dave4723 [2014-02-05 11:47:00]

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

Читать еще:  Как программировать на html

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

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

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

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

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

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

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

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

«вычесть числа в ALU»

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

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

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

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

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

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

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

Язык программирования. Языки низкого и высокого уровня

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

Со времени создания первых программируемых машин человечество придумало более восьми тысяч языков программирования (включая нестандартные, визуальные и эзотерические языки). Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты могут владеть десятком и более разных языков программирования.

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

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

  • стандарта языка — набора спецификаций, определяющих его синтаксис и семантику; стандарт языка может исторически развиваться (см. подробнее стандартизация);
  • воплощений (реализаций) стандарта — собственно программных средств, обеспечивающих работу согласно тому или иному варианту стандарта языка; такие программные средства различаются по производителю, марке и варианту (версии), времени выпуска, полноте воплощения стандарта, дополнительным возможностям; могут иметь определённые ошибки или особенности воплощения, влияющие на практику использования языка или даже на его стандарт.

Способы реализации языков

Языки программирования могут быть реализованы как: компилируемые, интерпретируемые и встраиваемые.
Программа на компилируемом языке при помощи компилятора (особой программы) преобразуется (компилируется) в машинный код (набор инструкций) для данного типа процессора и далее собирается в исполнимый модуль, который может быть запущен на исполнение как отдельная программа. Другими словами, компилятор переводит исходный текст программы с языка программирования высокого уровня в двоичные коды инструкций процессора.

Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Процессор компьютера, в этой связи, можно назвать интерпретатором для машинного кода.

Разделение на компилируемые и интерпретируемые языки является условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое
высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).
Для любого интерпретируемого языка можно создать компилятор — например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения.

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

Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий.
Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без программы-интерпретатора.
Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.

Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть, что есть языки, имеющие и интерпретатор, и компилятор (Форт).

Языки программирования низкого уровня

Первые компьютеры приходилось программировать двоичными машинными кодами. Однако программировать таким образом — довольно трудоемкая и тяжелая задача. Для упрощения этой задачи начали появляться языки программирования низкого уровня, которые позволяли задавать машинные команды в понятном для человека виде. Для преобразования их в двоичный код были созданы специальные программы — трансляторы.
Трансляторы делятся на:

  • компиляторы — превращают текст программы в машинный код, который можно сохранить и после этого использовать уже без компилятора (примером является исполняемые файлы с расширением *.exe).
  • интерпретаторы — превращают часть программы в машинный код, выполняют его и после этого переходят к следующей части. При этом каждый раз при выполнении программы используется интерпретатор.

Примером языка низкого уровня является ассемблер. Языки низкого уровня ориентированы на конкретный тип процессора и учитывают его особенности, поэтому для переноса программы на ассемблере на другую аппаратную платформу её нужно почти полностью переписать. Определенные различия есть и в синтаксисе программ под разные компиляторы. Правда, центральные процессоры для компьютеров фирм AMD и Intel практически совместимы и отличаются лишь некоторыми специфическими командами. А вот специализированные процессоры для других устройств, например, видеокарт и телефонов содержат существенные различия.
Языки низкого уровня, как правило, используют для написания небольших системных программ, драйверов устройств, модулей стыков с нестандартным оборудованием, программирование специализированных микропроцессоров, когда важнейшими требованиями являются компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам. Ассемблер — язык низкого уровня, широко применяется до сих пор.

Языки программирования высокого уровня

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

  • Адресный язык программирования
  • Фортран
  • Кобол
  • Алгол
  • Pascal
  • Pascal ABC
  • Python
  • Java
  • C
  • Basic
  • C++
  • Objective-C
  • Smalltalk
  • C#
  • Delphi
Читать еще:  Обзор и классификация языков программирования

Недостатком некоторых языков высокого уровня является большой размер программ в сравнении с программами на языках низкого уровня. С другой стороны, для алгоритмически и структурно сложных программ при использовании суперкомпиляции преимущество может быть на стороне языков высокого уровня. Сам текст программ на языке высокого уровня меньше, однако, если взять в байтах, то код, изначально написанный на ассемблере, будет более компактным. Поэтому в основном языки высокого
уровня используются для разработки программного обеспечения компьютеров и устройств, которые имеют большой объём памяти. А разные подвиды ассемблера применяются для программирования других устройств, где критичным является размер программы.

Используемые символы

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и
горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов
(включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + — * / () . , $ ‘ :
Заметным исключением является язык APL, в котором используется очень много специальных символов.
Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали.
Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

Как читать двоичный (бинарный) код

Если вам интересно узнать, как читать двоичные числа, важно понять, как работают двоичные числа. Двоичная система известна как система нумерации «base 2», что означает наличие двух возможных чисел для каждой цифры; один или ноль. Большие числа записываются путем добавления дополнительных двоичных единиц или нулей.

Понимание двоичных чисел

Знание того, как читать двоичные файлы, не является критичным для использования компьютеров. Но хорошо понять концепцию, чтобы лучше понять, как компьютеры хранят числа в памяти. Он также позволяет понимать такие термины, как 16-битные, 32-битные, 64-битные и измерения памяти, такие как байты (8 бит).

Как читать двоичный код

«Чтение» двоичного кода обычно означает перевод двоичного числа в базовое 10 (десятичное) число, с которым люди знакомы. Это преобразование достаточно просто выполнить в своей голове, когда вы поймете, как работает бинарный язык.

Каждая цифра в двоичном числе имеет определенное значение, если цифра не является нулем. После того как вы определили все эти значения, вы просто складываете их вместе, чтобы получить 10-значное десятичное значение двоичного числа. Чтобы увидеть, как это работает, возьмите двоичное число 11001010.

1. Лучший способ прочитать двоичное число — начать с самой правой цифры и двигаться влево. Сила этого первого местоположения равна нулю, то есть значение для этой цифры, если это не ноль, равно двум степеням нуля или единице. В этом случае, поскольку цифра является нулем, значение для этого места будет равно нулю.

2. Затем перейдите к следующей цифре. Если это один, то рассчитайте два в степени одного. Запишите это значение. В этом примере значение равно степени два, равной двум.

3. Продолжайте повторять этот процесс, пока не дойдете до самой левой цифры.

4. Чтобы закончить, все, что вам нужно сделать, это сложить все эти числа вместе, чтобы получить общее десятичное значение двоичного числа: 128 + 64 + 0 + 0 + 8 + 0 + 2 + 0 = 202.

Двоичные числа с подписью

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

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

Чтение двоичного числа со знаком почти такое же, как и без знака, с одним небольшим отличием.

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

2. Чтобы определить знак, осмотрите крайний левый бит. Если это единица, то число отрицательное. Если это ноль, то число положительное.

3. Теперь выполните те же вычисления, что и раньше, но примените соответствующий знак к числу, указанному крайним левым битом: 64 + 0 + 0 + 8 + 0 + 2 + 0 = -74.

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

Можно ли программировать в двоичном коде?

название действительно говорит все это. Мой друг сказал мне, что знает кого-то, кто может программировать в двоичном коде. Я никогда не слышал о ком-то программировании в двоичном формате, и несколько быстрых поисков Google не вернули ничего полезного. Поэтому я решил обратиться к сообществу SO. У кого-нибудь есть информация о программировании в двоичном формате и, если возможно, быстрый пример Hello World. Спасибо заранее.

6 ответов

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

сделал бы я это? Нет. Даже сборка полезна только в редких случаях, и нет причин (помимо демонстрации ваших навыков) отклонять сборщик’ы помочь.

Так как вы спросили о hello world, вы должны проверить в этой статье. Он показывает, как он написал, а затем оптимизировал программу x86 ELF для ее вывода. Первоначально он был написан в в NASM изменить в hex редакторе.

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

  • на рисунке виден монитор 6502 ROM, где шестнадцатеричный код и мнемоника сборки показаны бок о бок.

второй навык, который вам понадобится, — это перевести шестнадцатеричный код в двоичный из ума, что очень легко с трюком, который я объясню немного. Но очень легко запомнить двоичный эквивалент всех шестнадцатеричных цифр, из которых есть 16 из них, в конце концов (не так много, не так ли это?).

предположим, что это 1988 год, и мы потратили почти десятилетие на портирование 8-битных видеоигр на разные платформы для жизни, и, следовательно, запомнили следующее 6502 код — инструкции это соответствует инструкциям по сборке:

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

Читать еще:  Модели линейного программирования

на самом деле выше, является следующее ассемблерный код в мнемонической форме:

  • приведенный выше код помещает белый пиксель в левом верхнем углу экрана в 6502asm.com ассемблер / эмулятор, продолжайте и попробуйте!

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

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

который помогает писать код в двоичном формате на лету:

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

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

простая программа для отображения 5 на шестнадцатеричном светодиоде будет 0001000 0000101 0000001, написанная в двоичном формате, преобразованном в машинный код, который будет 8 5 1 . Затем эта программа запустится и отобразит 5 на светодиоде.

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

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

для храбрых сердца: вы можете попробовать получить изображение mikeos floppy и запустить монитор.программа бин. Он позволяет вводить шестнадцатеричные опкоды вручную и выполнять их. Например (как указано в документах), введите следующие инструкции: BE0790 E8FD6F C3 4D00$ произведет одиночный M на экране.

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

У меня была очень короткая программа uudecoe, закодированная в ASCII, которая могла быть префиксом файла UUEncoded. Полученный файл будет самораспаковывающимся и может быть отправлен по электронной почте. Я ожидал, что машинный код был сделан вручную. Я не могу найти его, и он мне не нужен, даже если я мог.

есть некоторые эзотерические языки программирования. Они используются в качестве экспериментов и довольно непрактичны, но один, называемый BrainF**k (да, это действительно реальная вещь), использует восемь разных символов для изменения значений байтов. Эти языки настолько близки, насколько это возможно.

Значение двоичного кода – почему компьютеры работают с единицами и нулями

Компьютеры не понимают слов и цифр так, как это делают люди. Современное программное обеспечение позволяет конечному пользователю игнорировать это, но на самых низких уровнях ваш компьютер оперирует двоичным электрическим сигналом, который имеет только два состояния: есть ток или нет тока. Чтобы «понять» сложные данные, ваш компьютер должен закодировать их в двоичном формате.

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

Подсчет в двоичном формате

В двоичном выражении первая цифра равноценна 1 из десятичной системы. Вторая цифра равна 2, третья – 4, четвертая – 8, и так далее – удваивается каждый раз. Добавление всех этих значений даст вам число в десятичном формате.

Учет 0 даёт нам 16 возможных значений для четырех двоичных битов. Переместитесь на 8 бит, и вы получите 256 возможных значений. Это занимает намного больше места для представления, поскольку четыре цифры в десятичной форме дают нам 10000 возможных значений. Конечно, бинарный код занимает больше места, но компьютеры понимают двоичные файлы намного лучше, чем десятичную систему. И для некоторых вещей, таких как логическая обработка, двоичный код лучше десятичного.

Следует сказать, что существует ещё одна базовая система, которая используется в программировании: шестнадцатеричная. Хотя компьютеры не работают в шестнадцатеричном формате, программисты используют её для представления двоичных адресов в удобочитаемом формате при написании кода. Это связано с тем, что две цифры шестнадцатеричного числа могут представлять собой целый байт, то есть заменяют восемь цифр в двоичном формате. Шестнадцатеричная система использует цифры 0-9, а также буквы от A до F, чтобы получить дополнительные шесть цифр.

Почему компьютеры используют двоичные файлы

Короткий ответ: аппаратное обеспечение и законы физики. Каждый символ в вашем компьютере является электрическим сигналом, и в первые дни вычислений измерять электрические сигналы было намного сложнее. Было более разумно различать только «включенное» состояние, представленное отрицательным зарядом, и «выключенное» состояние, представленное положительным зарядом.

Для тех, кто не знает, почему «выключено» представлено положительным зарядом, это связано с тем, что электроны имеют отрицательный заряд, а больше электронов – больше тока с отрицательным зарядом.

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

Вот схема типичного транзистора:

По сути, он позволяет току течь от источника к стоку, если в воротах есть ток. Это формирует двоичный ключ. Производители могут создавать эти транзисторы невероятно малыми – вплоть до 5 нанометров или размером с две нити ДНК. Это то, как работают современные процессоры, и даже они могут страдать от проблем с различением включенного и выключенного состояния (хотя это связано с их нереальным молекулярным размером, подверженным странностям квантовой механики).

Почему только двоичная система

Поэтому вы можете подумать: «Почему только 0 и 1? Почему бы не добавить ещё одну цифру?». Хотя отчасти это связано с традициями создания компьютеров, вместе с тем, добавление ещё одной цифры означало бы необходимость выделять ещё одно состояние тока, а не только «выключен» или «включен».

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

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

Таким образом, бинарная математика проще для компьютера, чем что-либо ещё. Двоичная логика легко преобразуется в двоичные системы, причем True и False соответствуют состояниям Вкл и Выкл .

Бинарная таблица истинности, работающая на двоичной логике, будет иметь четыре возможных выхода для каждой фундаментальной операции. Но, поскольку тройные ворота используют три входа, тройная таблица истинности имела бы 9 или более. В то время как бинарная система имеет 16 возможных операторов (2^2^2), троичная система имела бы 19683 (3^3^3). Масштабирование становится проблемой, поскольку, хотя троичность более эффективна, она также экспоненциально более сложна.

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

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector