Всегда ли машинный язык двоичный? [дубликат]

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

Всегда ли машинный язык — последовательность чисел, указывающих физическому компьютеру, что делать, — всегда двоичными? Т.е. всегда состоит только из нулей единица? Или он также может состоять из чисел, таких как 101, 242, 4 и т. Д.?


Все в компьютере (точнее, в любом типичном современном компьютере) является двоичным, на определенном уровне. «Единицы и нули» — это абстракция, идея, которую мы используем для обозначения способа различения двух значений. В ОЗУ это означает все большее и меньшее напряжение. На жестком диске это означает различные магнитные состояния и т. Д. Используя логическую логику и систему счисления с основанием 2, комбинация единиц и нулей может представлять любое число, а другие вещи (например, буквы, изображения, звуки и т. Д.) Могут быть представлены в виде чисел.

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


Давайте посмотрим на настоящую машинную инструкцию. Предположим, у нас есть процессор ARM, и мы хотим добавить 143 к значению в регистре 2, поместив результат в регистр 1. На языке ассемблера ARM, который написан

  ADD R1, R2  , # 143  

Эту инструкцию сборки можно закодировать как одну машинную инструкцию. Спецификация того, как это делается, находится на физической странице 156 ARM ARM, справочного руководства Acorn RISC Machine Architecture с забавным названием. Также необходимо взглянуть на определение «операнда переключателя», которое начинается на физической странице 444.

  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17  16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 |  Cond |  0 0 I 0 1 0 0 S |  Rn |  Rd |  операнд сдвига |  

Как вы, кажется, уже поняли, машинные инструкции — это числа , а в ARM они представляют собой числа фиксированного размера: 32 бита, разбитые на несколько полей. Чтобы закодировать указанное выше ADD, мы заполняем поля следующим образом:

  |  конд |  fmt |  Я |  код операции |  S |  Rn |  Rd |  гниль |  imm ||  E |  00 |  1 |  0100 |  0 |  2 |  1 |  0 |  143 |  

(«Операнд переключателя» разделен на «rot» и «imm», потому что я установил I = 1. Теперь, чтобы преобразовать это в одно 32-битное число, мы должны расширить его до двоичного, потому что многие поля не являются аккуратными числами в битах:

   31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 1 1 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0  0 1 0 0 0 0 1 0 0 0 1 1 1 1  

Для людей это большое размытие; шестнадцатеричный формат нам легче понять:

  1110 0010 1000 0010 0001 0000 1000 1111 E 2 8 2 1 0 8 F  

И поэтому обычно, общаясь с другими людьми, мы говорим, что «машинная инструкция», соответствующая ADD R1, R2, # 143 , является шестнадцатеричным числом. E282 108F . Мы могли в равной степени сказать, что это десятичное число 3 800 174 735, но это скрывает структуру полей в большей степени, чем шестнадцатеричный. (Кто-то, имеющий большой опыт отладки на голом железе на ARM, сможет выбрать код условия E, регистры источника и назначения 2 и 1, непосредственный операнд 8F = 143 из E282 108F с помощью относительная легкость.)

Все вышеперечисленные представления кодируют одну и ту же машинную инструкцию! Я изменил только то, как я это записал.

В терминах «единицы и нули», если вы загрузите программу, содержащую эту инструкцию, в ОЗУ на реальном компьютере, где-то в памяти появится битовый шаблон 1110 0010 1000 0010 0001 0000 1000 1111 (возможно, в обратном порядке из-за порядка байтов) . Но можно в равной степени сказать, что где-то в памяти шестнадцатеричное число E282 108F или декодированная инструкция ADD R1, R2, # 143 появляется. Битовые шаблоны в ОЗУ сами по себе не имеют смысла; значение исходит из контекста. И наоборот, этот битовый шаблон/шестнадцатеричное число вовсе не обязательно является инструкцией! Он также может появиться в программе, которая использует 32-разрядное целое число без знака 3 800 174 735 или число с плавающей запятой одинарной точности IEEE -1,199634951 × 10 21 как data .

3


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

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

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

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

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

В конечном итоге компьютер концептуально просматривает группы битов, поэтому он редко когда-либо смотрит на них. «10101010», это смотрит на 101, 242 или 4 и т. Д. Значение этих чисел зависит от их контекста в данном «предложении», частью которого они являются.


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

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


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

Несколько примеров Исключениями являются:

  • В лабораториях может быть несколько нечетных трех (или более) логических систем.
  • Есть несколько аналогов используются вычислительные системы.
  • Примером будущей высокопроизводительной вычислительной системы, не использующей двоичную логику, могут быть системы квантового отжига D-Wave.

Машинный язык — это не универсальный язык, а скорее строго процессор -связанный язык — язык, понятный процессору.

Вы можете спроектировать ЦП, который имеет 42 состояния вместо 2 состояний для наименьшего элемента памяти. Проблема в том, что вы не можете найти достаточно хорошую реализацию для такого процессора. Фактически, некоторые из первых компьютеров (включая ENIAC) были компьютерами с десятичным числом, которые неявно использовали десятичный машинный язык..

Тот факт, что это десятичное, двоичное или другое значение, зависит от количества состояний, которые может принять наименьший элемент памяти (бит); 2 не был выбран для целей проектирования ЦП, а скорее ограничен электронной реализацией: транзистор работает намного лучше и быстрее всего с двумя уровнями напряжения вместо 10 (или любого другого натурального числа больше 2).



Что такое двоичный?

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

1. Двоичная — это система счисления с основанием 2 , изобретенная Готфридом Лейбницем, которая состоит только из двух чисел: 0 и 1. Эта система счисления является основой для весь двоичный код , который используется для записи данных, таких как инструкции процессора компьютера, используемые каждый день.

Как работает двоичный код?

0 и 1 в двоичном формате означают ВЫКЛ или ВКЛ соответственно. В транзисторе «0» означает отсутствие потока электричества, а «1» означает, что электричеству разрешено течь. Таким образом, числа физически представлены внутри вычислительного устройства, что позволяет производить вычисления. Эта концепция дополнительно объясняется в нашем разделе о том, как читать двоичные числа.

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

Двоичный код по-прежнему является основным языком для компьютеров для следующих причин.

  • Это простой и элегантный дизайн.
  • Бинарный метод 0 и 1 быстро обнаруживает состояние включения или выключения электрического сигнала.
  • Положительные и отрицательные полюса магнитных носителей быстро преобразуются в двоичные.
  • Двоичный код — наиболее эффективный способ управления логическими схемами.

Как читать двоичные числа

На следующей диаграмме показано двоичное число 01101000. Каждый столбец представляет число два, возведенное в степень, причем значение этой экспоненты увеличивается на единицу при перемещении через каждую из восьми позиций. Чтобы получить результат этого примера, прочтите диаграмму справа налево и добавьте значение каждого столбца к предыдущему столбцу: (8 + 32 + 64) = 104. Как видите, мы не считайте биты с 0, потому что они «выключены».

Exponent: 2 7 2 6 2 5 2 4 2 3 2 2 21 2 0
Значение: 128 64 32 16 8 4 2 1
ВКЛ/ВЫКЛ: 0 1 1 0 1 0 0 0

Следующий пример — 11111111 в двоичное, максимальное 8-битное значение 255. Опять же, читая справа налево, мы имеем 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255.

Значение: 128 64 32 16 8 4 2 1
ON/OFF: 1 1 1 1 1 1 1 1
Примечание

Подсчет на компьютере обычно начинается на «0» вместо «1». Следовательно, подсчет всех бит равен 255, но если вы начнете с 0, это 256.

Совет

Если вы взяли двоичный код из первого примера ( что всего 104) и поместив его в ASCII, он выдаст строчную букву h . Чтобы написать слово hi , вам нужно добавить двоичный код для буквы i , который равен 01101001. Соединяя эти два кода вместе, мы получаем 0110100001101001 или 104 и 105, что означает hi.

Бинарный юмор

Изображение является примером бинарного юмора (шутки) через известное высказывание на многих футболках компьютерщиков. Те, кто умеет читать двоичный код, понимают, что эта цитата на самом деле говорит: «В мире есть только два типа людей: те, кто понимает двоичное, и те, кто нет». В двоичной системе 10 равно два , а не число десять .

Преобразовать текст в двоичный

Следующий инструмент преобразует любой текст в двоичный.

2. В сеансе FTP binary — это команда, которая переключает режим передачи файлов на двоичный. Для получения информации о двоичных и других командах FTP см .: Как использовать FTP из командной строки?

3. При использовании в качестве существительного термин « двоичный » может относиться к исполняемому файлу. Например, «найдите двоичный файл с именем program.exe и дважды щелкните его»

Оцените статью
clickpad.ru
Добавить комментарий