Другие языки программирования и технологии
Как компьютер отличает машинный код?
Простите за банальный вопрос, но ведь инструкции в дальнейшем тоже кодируются в двоичный код. Получается последовательность 0 и 1. А как процессор понимает когда инструкции заканчиваются и начинаются входные данные?
1. Процессор не оперирует отдельными битами.
2. Каждая команда - это некое число.
3. В зависимости от этого числа далее в памяти располагаются операнды, соответствующие команде.
4. Коды команд и количество операндов каждой из них составляют архитектуру процессора (на самом деле только часть ее, но в данном контексте нам пофиг), которая выполняется в виде физических электронных компонентов.
Вот так он и "знает" - сделали его так. Но отличить команду от данных в самом общем случае не может, что в свое время приводило к многочисленным ошибкам, когда данные исполнялись как команды, и было некислой дырой для всяких цул хацкеров. Сейчас как-то это более-менее пофиксили.
2. Каждая команда - это некое число.
3. В зависимости от этого числа далее в памяти располагаются операнды, соответствующие команде.
4. Коды команд и количество операндов каждой из них составляют архитектуру процессора (на самом деле только часть ее, но в данном контексте нам пофиг), которая выполняется в виде физических электронных компонентов.
Вот так он и "знает" - сделали его так. Но отличить команду от данных в самом общем случае не может, что в свое время приводило к многочисленным ошибкам, когда данные исполнялись как команды, и было некислой дырой для всяких цул хацкеров. Сейчас как-то это более-менее пофиксили.
Никак не понимает. Архитектура фон Неймана основана на том, что команды никак не отличаются от данных.
Если регистр счётчика команд указывает на адрес X, значит процессор возьмёт значение по этому адресу, выполнит его как команду и увеличит значение регистра на длину команды (каждая команда имеет известный размер). Именно так программа и выполняется.
Если же же к адресу X обращается команда чтения/записи/изменения данных, то значение по адресу X будет воспринято процессором как данные.
В общем случае, программа может менять свой собственный код.
В Гарвардской архитектуре есть, условно, отдельная память для команд и отдельная память для данных - так что они никак не смешиваются.
Если регистр счётчика команд указывает на адрес X, значит процессор возьмёт значение по этому адресу, выполнит его как команду и увеличит значение регистра на длину команды (каждая команда имеет известный размер). Именно так программа и выполняется.
Если же же к адресу X обращается команда чтения/записи/изменения данных, то значение по адресу X будет воспринято процессором как данные.
В общем случае, программа может менять свой собственный код.
В Гарвардской архитектуре есть, условно, отдельная память для команд и отдельная память для данных - так что они никак не смешиваются.
Никита Чередник
я потерял мысль.
https://ru.wikipedia.org/wiki/Машинный_код
ну вот например, BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
шестнадцатиричное представление программы.
101110110001000100000001-это представление команды BB 11 01
и где тут команды, а где инструкции?
https://ru.wikipedia.org/wiki/Машинный_код
ну вот например, BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
шестнадцатиричное представление программы.
101110110001000100000001-это представление команды BB 11 01
и где тут команды, а где инструкции?
А он и не понимает
поинтересуйся
1. архитектурой компьютера
2. прочти о исходном тексте, об объектом модуле, исполняемом модуле ,
над каждым модулем исполнение выполняет процессор, получая программу в кодах/командах процессора для реализации от модулей-посредников.
1. архитектурой компьютера
2. прочти о исходном тексте, об объектом модуле, исполняемом модуле ,
над каждым модулем исполнение выполняет процессор, получая программу в кодах/командах процессора для реализации от модулей-посредников.
Входные данные хранятся в другой области памяти.
Правда в той же секции, где хранятся команды, могут храниться и какие нибудь константы и адреса. Но они по другим адресам чем команды.
Правда в той же секции, где хранятся команды, могут храниться и какие нибудь константы и адреса. Но они по другим адресам чем команды.
Вопрос не такой уж и банальный. Если тебе интересно, можешь почитать спецификации интересующей тебя архитектуры, например х86.
https://ru.wikipedia.org/wiki/X86#Кодирование_инструкций
Тут по х86 можешь почитать.
https://ru.wikipedia.org/wiki/X86#Кодирование_инструкций
Тут по х86 можешь почитать.
в инструкциях сказано.
Похожие вопросы
- Вопрос по основам машинного кода и бинарного кода. Как это работает в своей основе?
- [Машинный код] Как?
- Как понять машинный код ?(Компилятор переводит исходный код компьютерной программы в машиный код).
- Машинный код.
- сколько чисел в машинном коде ?
- Программирование в машинных кодах.
- Вопрос из разряда компиляторов. На С++ написан код, генерирующий машинный код из команд на языке ассемблер.
- Ассемблер, двоичный код, и машинный код это одно и тоже?
- Языки програмирования, и машинный код.
- Как компьютер отличает числа от букв?
Я просто сейчас читаю, про ЦЛУ, АЛУ, микрокоманды. Везде "современная" информация, в итоге у меня не получается уловить мысль.
С какими-то простыми вопросами, все не сложно, допустим как работает оперативная память- конденсаторы заряжаются, потом оттуда считывается информация и перезаряжаются, так делал еще самый первый ЭВМ (хороший пример)
а вот, например, как работает ассемблер? -ну мол есть некие команды-некие числа, все этой информации тебе достаточно, иди с ними работай. Никакой истории развития. Никаких первых аналогов, которые упрощали бы понимание работы устройства.
получается все полученные недознания мешаются в кашу.