Команды, поступающие в процессор, являются совокупностью нулей и единиц, т.е. числами, поэтому программа представляет собой последовательность чисел, называемую машинным кодом.
Язык самой машины – машинный код – очевиден и однозначен для каждого вида компьютеров. Но эта последовательность нулей и единиц противоестественна для памяти человека, хотя несколько поколений программистов работали только в машинных кодах.
Программа может состоять из миллионов комбинаций единиц и нулей, и ошибка лишь в одном знаке приведет к неправильной работе всей программы. При всех различиях языков программирования все они, в конечном счете, сводятся к языкам высокого и низкого уровня. «Низкий» не значит «плохой». Операторы такого языка близки к машинному коду.
К ним относятся языки ассемблера, в которых двоичные последовательности были заменены символами (мнемониками). Первым таким языком был ассемблер компьютера «Эдсак», созданный в 1949 г. английским математиком М. Уилксом. Разумеется, ассемблеры проще машинных кодов, в них можно создавать инструкции для определенных действий. Однако применение ассемблера оставляет нерешенными ряд задач:
Подключение ELM327 к ноутбуку через Bluetooth/OpenDiag
-во-первых, программирование на языке ассемблера требует хорошего знания архитектуры машины, на которой программа будет выполняться. Это значительно сужает круг потенциальных разработчиков программного обеспечения. Например, для разработки программного обеспечения для решения экономических задач программист должен одинаково хорошо разбираться как в предметной области, так и в архитектуре компьютера; наладить совместную работу двух разных людей, каждый из которых является специалистом в одном из этих вопросов, значительно сложнее;
-во-вторых, как следствие, низкий уровень языка вынуждает программиста мыслить не категориями предметной области, а в терминах ячеек памяти, индексных и базовых регистров и т.п.;
-в-третьих, язык ассемблера вследствие жесткой привязки к архитектуре определенного компьютера делает программы
непереносимыми: на другой тип компьютеров, делает непригодными все ранее разработанные программы, поскольку новый компьютер имеет другие мнемоники и формат команд, другие методы адресации аргументов и т.п. Кроме того, переучивание программистов на новую систему команд также потребует определенного времени, что делает переход на другую архитектуру еще более трудным
11.Что такое транслятор
Ограниченность ассемблеров была преодолена в языках высокого уровня. Первым распространенным языком высокого уровня явился Фортран, разработанный в 1954-1957 гг. Дж. Бекусом в фирме IBM и до сих пор применяемый для научных расчетов.
Поскольку его применение занимало много времени «тихоходных» в то время машин, для него был создан компилятор, переводивший его программы в машинный код. Это положило начало особым видам программ – трансляторам, которые для каждого типа компьютеров переводят программы, написанные на языке высокого уровня, в их машинный код.
РАСПОЗНАВАНИЕ АВТОМОБИЛЬНЫХ НОМЕРОВ С ПОМОЩЬЮ PYTHON | КОМПЬЮТЕРНОЕ ЗРЕНИЕ | PYTESSERACT, OPENCV
Трансляторы бывают двух видов – компиляторы и интерпретаторы
Компилятор транслирует в ходе непрерывного процесса всю программу, написанную на языке высокого уровня. При том создается полная программа в машинных кодах, которую затем ЭВМ выполняет без участия компилятора
Интерпретатор последовательно анализирует по одному оператору программы, превращая при этом каждую синтаксическую конструкцию, записанную на языке высокого уровня, в машинные коды и выполняя их одна за другой. Интерпретатор должен постоянно присутствовать в зоне основной памяти вместе с интерпретируемой программой, что требует значительных объемов памяти. Следует заметить, что любой язык программирования может быть как интерпретируемым, так и компилируемым, но в большинстве случаев у каждого языка есть свой предпочтительный способ реализации. Языки Фортран, Паскаль в основном компилируют; язык Ассемблер почти всегда интерпретирует; языки Бейсик и Лисп широко используют оба способа.
Источник: studfile.net
Как процессор »понимает» машинный код?
Как процессор понимает нули и единицы?
Вернее выражаясь, как происходит преобразование нулей и единиц в электрический сигнал.
Я только начал изучать данную тему и понимаю что есть ОЗУ, регистры, АЛУ и многое другое.
Есть ли в ЦПУ ЦАП? Так как приходит в голову только преобразование цифровой информации в аналоговый сигнал.
- Вопрос задан 20 окт. 2022
- 577 просмотров
3 комментария
Простой 3 комментария
https://youtube.com/c/AlekOS1/videos
Может пригодится
Дмитрий, только вчера смотрел про ассемблер из его видео, и оттуда и возник вопрос))
Решения вопроса 0
Ответы на вопрос 7
Разработчик ПО и IT-инженер
Никак не понимает — у него нет сознания для понимания чего бы-то ни было. Биты сами по себе реализуются на физическом уровне: есть сигнал — есть бит, нет сигнала — ноль. И далее сигнал либо идет дальше либо нет. Есть транзисторы — на базе транзисторов строятся другие логические элементы, которые перенаправляют сигнал дальше в зависимости от состояния.
И вот это все вместе позволяет делать вещи такого типа: если вот тут такое-то сочетание битов, то сложить содержимое вот этих двух регистров, если другое — то вычесть и т.д. (примерно, конечно). В процессоре есть декодер команд — вот в нем и реализована вся эта логика по выполнению команд. Рекомендую изучить основы компьютерной схемотехники, устройство процессоров, транзисторов и как оно все работает.
Ответ написан 20 окт. 2022
Нравится 2 17 комментариев
получается что нет никаких нулей ,единиц итд, вся инфа в эл сигналах?а как же при программировании код вводится. он же в текстовом виде скажем так.
Текст, нули и единицы — это всего лишь абстракция, придуманная человеком. Все, что на экране — это пиксели изображения в буфере, каждый пиксель представлен несколькими байтами цветов, а каждый байт — битами, каждый бит — это либо наличие напряжения в ячейке оперативной памяти/видеокарты либо его отсутствие. Текст — тоже всего лишь байты, которые кодируют те или иные символы.
тогда наверное вопрос можно сформулировать, как память озу записывает биты как эл сигнал(напряжение)? есть информация в битах которая становится напряжениями на транзисторах. сорри если совсем тупые вопросы задаю.если там нет чисел,то как информация становится напряжением на ячейках озу
как память озу интерпретирует(как преобразуются) биты в эл сигнал? есть информация в битах которая становится напряжениями на транзисторах
Никак. Во-первых, ОЗУ никак и ничего не интепретирует и не преобразует. Это просто набор ячеек памяти, у каждой ячейки может быть только два состояния: есть сигнал и нет сигнала. И все. Вся информация в компьютере на физическом уровне представлена вот в этом виде.
На жестком диске чуток по-другому — намагничена зона или размагничена. Ничто и нигде никак не конвертируется. Вот пара примеров. Фуксия, пурпурный цвет: #FF00FF -> 255, 0, 255 -> 1111 1111, 0000 0000, 1111 1111. Буква Z: 90 -> 0101 1010. — Каждый бит представляет собой ячейку памяти: 1 — есть напруга, 0 — нет напруги. Еще раз напоминаю, что бит — это всего лишь абстракция. Физически — бит не существует.
Например, за бит мы можем спокойно принять наличие/отсутствие машины на парковке. Машина есть — 1, нету — 0. Ну или наоборот. Бит — это парковка или сама машина?
VoidVolker, но ведь информация не приходит к нам в виде напряжения.или я совсем запутался)
Именно и приходит. Еще приходит в виде оптического сигнала по оптоволокну и даже по радио. Далее сигнал проходит через всю логическую башню, выстроенную над битами за полвека, сигнал — бит — байт — машинный код — ассемблер — ЯП высокого уровня — *куча абстракций в программе и взаимодействий с ОС* — результат на экране пользователя в виде картинки и звука к колонках.
VoidVolker, спасибо,очень приблизительно я понял,надо учить мат часть,получается
VoidVolker, видимо у меня вопрос к вам который расставит всё на свои места, если информация это не 0 и 1,то что? в физическом смысле и как она хранится тогда ,если это не цифры.а ассемблер например,там же всё в понятном человеку буквенном виде(грубо говоря) а комманды поступают и становятся наличием либо отсутствием сигнала в ячейке памяти
если информация это не 0 и 1,то что?
Информация — это тоже абстракция. Вот что говорит википедия:
Информа́ция (от лат. informātiō «разъяснение, представление, понятие о чём-либо» ← informare «придавать вид, форму, обучать; мыслить, воображать»[1]) — сведения независимо от формы их представления[2][3].
Несмотря на широкую распространённость, понятие информации остаётся одним из самых дискуссионных в науке, а термин может иметь различные значения в разных отраслях человеческой деятельности[4].
Информация — это не материя и не энергия, информация — это информация
Норберт Винер[5]
Определений информации существует множество, причём академик Н. Н. Моисеев даже полагал, что в силу широты этого понятия нет и не может быть строгого и достаточно универсального определения информации[6].
в физическом смысле и как она хранится тогда
Так ведь я же уже ранее написал: на жестком диске она хранится в виде намагниченной области, в оперативной памяти — есть ли напряжение вот на этом конкретном проводнике или его нет. Что конкретно из этого не понятно?
а ассемблер например,там же всё в понятном человеку буквенном виде(грубо говоря)
- Взять следующий байт из строки (в данном случае — это число, кодирующее символ)
- Конвертировать байт в номер ячейки массива с картинками, где находится картинка данного символа
- Взять из ячейки массива адрес картинки
- Отрисовать эту картинку в текущей позиции в текущем буфере экрана
примерно получается что внутри всё работает только на физике а мы видим это в буквах и цифрах.
тогда если правильно до меня дошло то цифры (МАШИННЫЙ КОД) НИКОГДА не преобразуются в сигналы?
но при этом инструкции для процессора пишутся на нулях и единицах)))
тогда если правильно до меня дошло то цифры (МАШИННЫЙ КОД) НИКОГДА не преобразуются в сигналы?
По сути — да, т.к. цифры уже представлены набором сигналов. И процессор просто меняет состояния сигналов в ячейках памяти.
но при этом инструкции для процессора пишутся на нулях и единицах)))
Нет, не пишутся. Нули и единицы — это для нас они нули и единицы, т.к. это опять же все абстракции, а для процессора — это просто наличие или отсутствие сигнала в такой-то ячейке памяти. Вот такой-то байт (набор таких-то сигналов) — это такая-то команда, буква, цифра, что угодно. Я же уже кучу раз написал про абстракции. Вам неизвестен данный термин?
Так загляните в словарь.
VoidVolker, я знаю что такое абстракция, спасибо.
тогда как идет взаимодействие кода с процессором?
мы же не сидим с выключателем и не щелкаем морзянку чтобы он видел отсутствие или наличие сигнала в ячейке памяти.
я понимаю про абстракцию итд и начинаю себя чувствовать полным дураком, но не могу понять одного.
процессор ничего нигде не считывает и не распознает, однако как тогда мы с ним взаимодействуем
Boris_Britva1611, или при программировании мы вообще с ним не взаимодействуем а с памятью. тогда как всё туда попадает.
или что,в операционке заложено всё заранее?
VoidVolker, вы пишите. Ассемблер — это ЯП низкого уровня. Тоже, сюрприз, абстракция. Ассемблер кодирует машинный код, который представлен байтами и битами
кодирует машинный код, а дальше что происходит?как машинный код становится напряжением если грубо говоря
VoidVolker, если там всё на эл сигналах, то как мы управляем ими?
или что,в операционке заложено всё заранее?
Сюрприз! Именно так и именно для этого и существует операционная система, чтобы мы воткнули клавиатуру и мышку в ЮСБ порт, в операционной системе ЮСБ драйвер вызвал бы срабатывание события «подключено новое устройство», далее ОС произвела бы опрос устройства — «HID устройство» и когда мы что-то печатаем, двигаем курсор и кликаем — сигналы от устройств отправляются в порт, оттуда в драйвер, из драйвера в ОС, а ОС уже передает этот сигнал в программу. На физическом уровне — это просто изменение электрических состояний кучи проводов, шин, транзисторов и в конечном итоге ячеек в оперативной памяти, а затем, после прохождения через огромный слой софта меняется состояние ячеек памяти в буфере экрана и мы видим результат на экране. Так что фактически, нажимая кнопочки и двигая мышку — мы просто меняем состояние некоторых определенных транзисторов. А вот ОС уже интепретирует это в соответствии с текущей ситуацией.
Изучите историю появления первых компьютеров — сначала была механика, потом ламповые, там были десятки битов памяти и несколько простых логических операций, была куча переключателей для внесения данных и лампочек для отображения результата. И во что и как это со временем превратилось.
VoidVolker, большое спасибо, теперь я понял.почитаю на досуге)
как процессор понимает нули и единицы
Никак, он вообще думать не умеет
как происходит преобразование нулей и единиц в электрический сигнал.
Никак. Нет там нулей/единиц, Есть только электрические сигналы типа включено/выключено. Это человек такие сигналы называет «логический ноль», «логическая единица»
Есть ли в ЦПУ ЦАП?
А что такое ЦПУ? Если имеется ввиду CPU (логика подсказывает), то нет его там. Я даже представить не могу что ему там делать. Современный процессор с аналоговыми сигналами ни как не пересекается. Существуют процессоры для цифровой обработки аналоговых сигналов (аудио, видео, пр.) называется DSP там и ЦАП есть и АЦП и даже не один.
Ответ написан 20 окт. 2022
Комментировать
Нравится 2 Комментировать
Токсичный шарпист
Есть ли в ЦПУ ЦАП? Так как приходит в голову только преобразование цифровой информации в аналоговый сигнал
Нет, тк ЦП не нужно никак генерить аналоговый сигнал.
Вернее выражаясь, как происходит преобразование нулей и единиц в электрический сигнал.
Нули и единицы — это абстракция, придуманная человеком. На самом деле компьютер абсолютно на всех этапах работает только с электрическими сигналами.
Даже когда показывает тебе текст или видео
Ответ написан 20 окт. 2022
Комментировать
Нравится 1 Комментировать
в ЦПУ нет понятия «аналоговый сигнал» — он работает с четко заданными состояниями «0» и «1» (бывает и не двоичный процессор), описанными напряжением в соответствующих ячейках памяти.
эти состояния «нажимают» через проводки на АЛУ и прочие модули процессора и перестраивают их работу.
для пример стоит глянуть видосик с ткацкой машинкой управляющей перфокартами, наглядно неимоверно.
Ответ написан 20 окт. 2022
Комментировать
Нравится 1 Комментировать
Мне кажется комментаторы только запутали человека. Одни пишут, что нет аналогового сигнала и всё нули и единицы, другие пишут, что нули и единицы — это абстракция (а значит всё работает на аналоговых сигналах)
Вполне можно рассуждать что есть 1 и 0. Единица — наличие определенного напряжения. 0 — его отсутствие (или слишком слабое напряжение)
Как на это смотреть, как на аналоговый или логический сигнал чисто дело вкуса.
Главное — надо понимать, что компьютер (как и всякая схема), будет делать то, таким методом и с такими результатами, как это предусмотрели инженеры этой схемы.
На базе транзисторов, диодов и резисторов создаются логические элементы, это которые НЕ, И, ИЛИ
Оперируя этими логическими элементами (из физических транзисторов, диодов и резисторов), создаем уже более сложные микросхемы, отвечающие уже за конкретные операции (побитовое суммирование например)
Мне по запросу «логические элементы на транзисторах» гугл первой же ссылкой достаточно понятный материал выдал.
studref.com/532624/tehnika/logicheskie_elementy_logicheskie_shemy_tranzistorah
Элемент памяти это «тригер» (можно в вики прочитать) тоже просто микросхема, состояние которой можно определять и которое она будет продолжать выдавать на выходе даже без входного сигнала.
Я в детстве увлекался этим.
В техникуме часы спроектировал для диплома.
__
Кстати автор, если какой-то ответ вам помог, не забудьте пометить его(их), как решение.
Ответ написан 20 окт. 2022
Нравится 1 1 комментарий
Может я не так сформулировал вопрос, но я хотел узнать как происходит взаимодействие пользователя с пк, процом.
Пишем код допустим, тот проходит до языка низкоуровнего, как тогда процессор понимает, считывает итд этот код, я знаю про транзисторы, защёлки, триггер, логические элементы итд.
С вычислительной техникой немного знаком, трудно понять как биты интерпретируются процессором и памятью, как мы управляем состоянием наличия либо отсутствия сигналов, комп же обрабатывает как то код который мы пишем, который по сути в текстовом виде и доходит до команд типа (mov ax) итд
Проц же не умеет читать)
Источник: qna.habr.com
Код машина считывает согласно программе
главное отличие между машинным кодом и байт-кодом является то, что Машинный код — это набор инструкций на машинном языке или в двоичном формате, которые могут непосредственно выполняться ЦПУ, а байт-код — это промежуточный код, генерируемый при компиляции исходного кода, который может выполняться виртуальной машиной.
Компьютерная программа — это набор инструкций, выполняющих определенную задачу. Специальное программное обеспечение, такое как компиляторы или интерпретаторы, преобразует программу в машиночитаемый машинный код. С другой стороны, байт-код не является машинным кодом. это переносимый код. Более того, программное обеспечение, такое как виртуальная машина, может выполнять его напрямую.
Ключевые области покрыты
1. Что такое машинный код
— определение, функциональность
2. Что такое байт-код
— определение, функциональность
3. Какова связь между машинным кодом и байт-кодом
— Схема ассоциации
4. В чем разница между машинным кодом и байт-кодом
— Сравнение основных различий
Основные условия
Байт-код, компилятор, интерпретатор, машинный код
Что такое машинный код
Машинный код — это набор инструкций на машинном языке. Процессор может выполнить его напрямую. Программист может написать компьютерную программу, используя язык программирования высокого уровня, такой как C, C ++, Java и т. Д. Эти языки имеют синтаксис, подобный английскому языку, и программисту легче читать и понимать. Однако эти программы не понятны компьютеру.
Поэтому программа или исходный код преобразуются в машинно-понятный машинный код. Компилятор или интерпретатор выполняет это преобразование.
Рисунок 1: Машинный код
Компилятор сразу преобразует весь исходный код в эквивалентный машинный код. Интерпретатор построчно преобразует исходный код в эквивалентный машинный код. Поэтому язык на основе компилятора работает быстрее, чем язык на основе интерпретатора. Наконец, CPU может напрямую выполнять машинный код для выполнения определенной задачи в программе.
Что такое байт-код
Байт-код создается после компиляции исходного кода. Это промежуточный код. Байт-код является исполняемым на виртуальной машине. Кроме того, виртуальная машина преобразует байт-код в машинный код.
Рисунок 2: Java Bytecode
Java-программы в основном используют байт-коды. При компиляции исходного кода Java компилятор Java преобразует этот исходный код в байт-код. Кроме того, этот байт-код исполняется виртуальной машиной Java (JVM). JVM преобразует байт-код в машинный код. Любой компьютер с JVM может выполнить этот байт-код.
Другими словами, любая платформа, состоящая из JVM, может выполнять байт-код Java.
Связь между машинным кодом и байт-кодом
- Виртуальная машина преобразует байт-код в машинный код.
Разница между машинным кодом и байт-кодом
Определение
Машинный код — это язык программирования, состоящий из двоичных инструкций, на которые компьютер может реагировать напрямую. Напротив, байт-код является формой набора команд, разработанного для эффективного выполнения программным обеспечением, таким как виртуальная машина. Следовательно, это объясняет принципиальную разницу между машинным кодом и байт-кодом.
основа
Кроме того, основное различие между машинным кодом и байт-кодом заключается в том, что процессор или процессор могут напрямую выполнять машинный код. С другой стороны, после компиляции исходного кода создается байт-код. Виртуальная машина может выполнить его.
Тип
Другое различие между машинным кодом и байт-кодом заключается в том, что машинный код является кодом низкого уровня, а байт-код является промежуточным кодом.
Вкратце, процессор или процессор могут напрямую выполнять машинный код. Однако байт-код создается после компиляции исходного кода, и виртуальная машина может его выполнить. Таким образом, в этом главное отличие машинного кода от байт-кода.
Ссылка:
1. «Машинный код». Википедия, Фонд Викимедиа, 24 сентября 2018 г.
Источник: ru.strephonsays.com