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

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

Я понимаю, как код скомпилирован для сборки, и эта сборка заменена на 1:1 двоичными кодами. Может ли кто-нибудь помочь мне понять, как двоичное соединение связано с оборудованием? Как бинарное физическое чтение и запуск? Как работает оператор if в аппаратном обеспечении?

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

Спасибо

4b9b3361

Ответ 1

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

  • Начните с некоторых простых логических схем, таких как AND, OR, NOT и триггер. Триггер представляет собой пару транзисторов, расположенных так, что если один из них включен, другой выключен или наоборот. Таким образом, он может "запомнить" один бит информации, поэтому вы можете думать об этом как о хранении одной двоичной цифры. Некоторые строки ввода могут помещать их в одно или другое состояние и, таким образом, "писать" на него.

  • Вы можете сохранить большее количество, имея кучу триггеров, и назовите его "register". Например, если у вас есть четыре триггера в регистре, существует 16 возможных комбинаций, поэтому вы можете думать о нем как о количестве чисел от 0 до 15.

  • Пропустив немного, вы можете купить "чип памяти". Это то, что есть большое количество регистров, например, 16 из них. Он включает 4 провода ( "адресные" провода), и он имеет 4 провода, выходящих (провода "данных" ). Таким образом, число от 0 до 15 может поступать как адрес и выбирает один из 16 регистров, значение которых представлено на проводах выходных данных (таким образом, "считывая" его). Еще несколько проводов могут привести к входу данных на проводах данных, чтобы номера были помещены в регистр ( "записано" ).

  • Теперь предположим, что у вас есть внешний 4-битный регистр (назовите его R) и немного схемы, чтобы он

    • представляет значение в R по адресу памяти
    • читает 4-битное значение в этом регистре и перемещает его в R
    • и повторяет это снова и снова

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

Теперь вы можете украсить эту штуку множеством способов. Вы можете расширить память, чтобы иметь 5-битный адрес (32 регистра). Затем, если одна из адресных линий связана с внешним миром, она будет делать разные вещи в зависимости от внешнего мира. Это "машина конечного состояния".

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

Конечно, это очень простой компьютер, но это примерно так, как они начинались.

Ответ 2

Полный ответ на ваш вопрос будет включать в себя книгу и довольно толстую.

Когда вы говорите "код", я предполагаю, что вы ссылаетесь на скомпилированный язык высокого уровня, например на С++. Обычно компилятор переводит этот код в машинный язык или двоичный, как вы заявляете в своем вопросе. Мы аккуратно избегаем обсуждения управляемого и неуправляемого кода, p-кода и т.д. То есть мы просто говорим о компиляторах, предназначенных для конкретных процессоров/операционных систем. Например, Java компилируется в псевдокод, называемый байт-кодом. Мы также избегаем всего редактирования ссылок или связывания, так как несколько исходных модулей собираются в машинный язык, а затем объединяются в одну исполняемую программу.

Хорошо, теперь, когда мы покрыли большую часть того, что мы не собираемся покрывать, вот что обычно происходит. И "обычно", я имею в виду большинство скомпилированных языков в среде DOS, Linux или Windows. Исходный код преобразуется в машинный язык, который записывается в исполняемый файл. Этот исполняемый файл содержит более или менее образ того, как должна выглядеть программа в памяти. Когда вы сообщаете операционной системе о запуске вашей программы, выполняется эквивалент ОС "Load and Go". Это означает, что образ памяти в исполняемом файле загружается в память, а затем операционная система делает машинный язык JUMP первой инструкции в программе. Затем ЦП слепо следует инструкциям оттуда, пока не появится EXIT.

Вся эта JUMP... EXIT nastiness - это радикальное упрощение для современных ОС. Как вы можете себе представить, если бы процессор следовал за ним, слепое послушание, инструкции в программе, которые сбились с пути, компьютер рухнул бы... или еще хуже. Такова была судьба многих ошибочных программ в первые дни, и основной вклад в многие BSOD.

Ответ 3

Это огромная, очень сложная тема. Лучший учебник, который я видел по этому вопросу, - Паттерсон/Хеннеси "Компьютерная организация и дизайн" , в котором много изданий.

Кроме того, что вы предлагаете прочитать его, я бы не посмел попытаться вставить семестровый класс в 500-символьный ответ.

Ответ 4

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

Ответ 5

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

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

Посмотрите на код операции, например, на команду добавления с использованием регистров, несколько бит определяют регистр источника, несколько бит для регистра назначения - несколько бит говорят, что это инструкция добавления. Скажем, этот набор инструкций, который вы ищете, использует только два регистра для добавления на основе регистров. Существует некоторая логика, сумматор, который может добавить два элемента размером регистров и вывести результат и бит переноса. Регистры хранятся на чипе в битах памяти, иногда называемых флип-флопами. Поэтому, когда добавление декодируется, входные регистры привязаны к логике добавления с помощью электронных переключателей. В наши дни это происходит в начале тактового цикла, к концу тактового цикла сумматор имеет результат, а выход маршрутизируется в биты для регистра назначения, и ответ фиксируется. Обычно добавление изменяет флаги в регистре флага. Когда результат слишком велик, чтобы быть сохраненным в регистре (подумайте о том, что произойдет, когда вы добавите десятичные числа 9 и 1, вы получите 0, чтобы 1 правильно?). Существует некоторая логика, которая смотрит на результат сумматора и сравнивает биты с нулевым значением, которое устанавливает или очищает флаг z в регистре флага. Другой бит-бит - бит знака или n бит для отрицательного значения, это самый старший бит ответа. Все это делается параллельно.

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

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

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

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

Друг указал мне на эту книгу http://www1.idc.ac.il/tecs/, которую я хотел бы прочитать, но пока не знаю. Возможно, это просто книга, которую вы ищете.

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

Ответ 6

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

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

Ответы, до сих пор, "сильно упрощены", потому что, ну, они должны быть.

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

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

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

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

Ответ 7

Когда мы смотрим на Binary или на язык программирования, мы смотрим на символы и слова, которые человек может понять, которые описывают, по существу, электрическую активность электронной системы. В конечном счете, скорость энергии, количество энергии, потеря энергии, создание тепла и света и ИЗМЕНЕНИЕ того, что вещество, которое протекает энергия, проходит в результате возбуждения, а также как это влияет на активность энергии по мере того как он течет, понимается человеком и управляется или используется с электроникой. Одним из факторов понимания сложной системы, которая является компьютером или другим устройством, является знание того, что делает электричество, текущее внутри него. Чтобы это знать, мы описали одно из поведения электричества с использованием чисел 1 и 0. Вы должны знать, что делает физический элемент, и иметь возможность дать стандартное описание этого, чтобы отслеживать, что происходит, когда вы меняете факторы что вы думаете, что способствуют контролю элемента/вещества/субатомной частицы, цифры помогают вам рационализировать то, что происходит с частицами, которые вы иначе не можете видеть.

Итак, Binary - это визуальное представление, которое использует числа для описания активности электричества в части оборудования. Либо они являются потоком заряда, либо не являются потоком заряда. Заряд преобразуется в Д/С от переменного тока, а активность заряженных частиц стабилизируется часами, скоростью протекающей через цепь энергии, сопротивлением (что приводит к потере энергии и созданию тепла и количество времени, когда часть цепи обесточивается, все объединяется, позволяя нам понять и использовать наше понимание этого явления, чтобы придумать единицу измерения для стандартизации количества энергии, текущей в единицу времени. помогает нам в том, что мы пытаемся использовать энергию. Остальные компоненты компьютеров подобны действительно продвинутой системе транзисторов, конденсаторов и резисторов, которые манипулируют зарядом, который течет к этим компонентам и через них, компоненты ловушки заряда временно или медленно до тех пор, пока компонент не достигнет определенного уровня энергии, а затем произойдет дуговая вспышка, заставляя запасенную энергию активировать другой компонент или область системы с определенным (контролируемым) количеством e Nergy. каждая цифра двоичного кода представляет собой представление бит, бит - это объяснение электрического поведения в определенной электрической составляющей (известный здесь как сигнал вперед), байт - 8 единиц электрического сигнала. В целом соглашается, что вам нужно как минимум 8 бит электрического сигнала, чтобы компьютер мог аккуратно и практично использовать электричество, втекающее в него.

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

Ответ 8

(сильно упрощен)

Двоичный (например, строка двоичного кода из строки машинного кода /asm ) загружается в память с диска. Затем команда посылает логику процессора контроллеру памяти для загрузки содержимого памяти в локальный ресивер процессора. Затем он интерпретируется как инструкция, выполняемая процессором.

Я изучил этот уровень материала, выполнив микрокодирование в колледже.

В действительности существует много других шагов, которые могут произойти в зависимости от сложности процессора и мощности. Процессор состоит из различных частей (ALU, регистров и т.д.), И они сотрудничают в получении инструкций, данных и обработки. Если вас интересует этот уровень понимания, и я благодарю вас за то, что вы задали вопрос, скажите, пожалуйста, книгу о компьютерной архитектуре. Я использовал Structure Computer Organization Tanenbaum в колледже.

Ответ 9

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

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

Я не квалифицирован, чтобы объяснить электротехнику за этим, но вы, вероятно, могли бы найти его.

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

Ответ 10

Вы можете найти эту ссылку: http://www.eskimo.com/~ddf/Theory/Micro_Fund/Commands/AssyLnge.html

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

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

Итак, для оператора if существует команда для того, равны ли два значения и куда идти, если они не являются (ветвь, если не равна). Будут некоторые другие, такие как ветвь с равными или ветвь больше.

Они будут в сборке.

Команды помещаются в регистры с соответствующими аргументами и рассчитываются на следующем такте.

Это очень упрощено, но в значительной степени то, что вы видите в сборке, это то, что увидит микропроцессор.

Чтобы перейти к более подробным сведениям, вероятно, будет недоступен для StackOverflow.

Ответ 11

В очень упрощенном виде компьютер может быть представлен как бесконечный цикл (реализованный в аппаратном обеспечении) и возможности выполнять простые арифметические операции (также реализованные в аппаратных средствах). В цикле он делает следующее:

  • читать память на ПК (ПК - это счетчик циклов, который увеличивается)
  • декодировать команду и операнды
  • выполните команду
  • записать результаты в память

И что это. Также есть команды управления, которые могут изменять ПК и которые используются для выражения "if... then... else".

Ответ 12

Этот вопрос очень сложный, у меня 2 градуса именно в этом, и я все еще только поцарапал поверхность.

Если вы хотите ввести в действие, как все это работает, MIT имеет несколько бесплатных классов, доступных для просмотра в Интернете. Этот, вероятно, лучший, чтобы вы начали.

Ответ 13

SW - это не только SW-язык, на котором он написан, как говорится на листе бумаги. SW также принимает физическую форму. В какой-то момент программное обеспечение на концептуальном уровне переходит в программное обеспечение на физическом уровне, и это происходит, когда программист начинает вводить код в клавиатуру на любом языке SW, который он/она работает. С того момента, как нажата клавиша, она полностью разряжается... это точка тогда, когда происходит интерфейс, в том смысле, что с момента нажатия на клавиатуру весь бизнес превращается в манипуляцию электронами - как сложный, изощренные и изобретательные усилия, как это может быть. Мышление в терминах двоичных чисел 0 и 1 является лишь метафорой высокого и низкого напряжения, уже являющейся физическим проявлением за пределами нажатия клавиши. Когда вы вводите букву я в качестве первой буквы IF... THEN на клавиатуре, напряжения, соответствующие 01001001, помещаются в первые 8 слотов реестра через электрические импульсы, вызванные физическим нажатием клавиши I. Отсюда отсюда электроника.

Ответ 14

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