Вопрос Откуда в программировании числа?

Регистрация
15 Апр 2013
Сообщения
87
Репутация
0
Спасибо
0
Монет
0
Вот есть переменные. А есть просто числа. Откуда берутся именно сами числа? Допустим напишем:

mov eax, 3

И откуда взялась эта 3? Она помещается компилятором прямо в машинный код программы, как переменная? Но компилятор ведь тоже программа. И как и любая программа - она выполняется команда за командой.

Значит ли это, что у процессора есть как минимум 255 однотипных команд типо: "добавить 1", "добавить 2", "добавить 3", "добавить 4" итд?
 
У процессора есть одна команда на сложение, "добавить 1". Грубо говоря так. Это если про операцию сложения

И - как "откуда взялись числа"? С них всё началось. Компьютеры создавались сначала как "мощные и быстрые калькуляторы"
Числа просто-напросто пишутся в память. Сначала писались теми же 0 и 1 ("нет сигнала - есть сигнал"), а потом навертели сверху языков программирования, компиляторов, и т.д., и стало возможным написать сразу 3, а остальное сделает программа
 
Сча твой будильник зазвенит. Кубит, не ион.
 
>И откуда взялась эта 3?
Из исходного кода программы

>Значит ли это, что у процессора есть как минимум 255 однотипных команд типо: "добавить 1"...
Это значит, что у процессора есть несколько вариантов команды mov, один из которых состоит из опкода (размером в байт в конкретном случае и значением b8) + параметра (размером 4 байта также для этого случае), где этот самый параметр - то самое число из исходника.

Это не означает, что в бинарном коде ассемблера нужно куда-то вставлять 4 миллиарда команд размером по 5 байт, которые перечисляют все возможные комбинации параметров
 
Это называется константа. Если на уровне ассемблера - значение, хранящееся по указанному адресу. Адрес, если что - это в ассемблере имя переменной. А значение, хранящееся по этому адресу может быть просто числом, а может быть адресом другой константы или переменной. Или адресом вызова процедуры - это уже по контексту программы.
 
Да, эта 3 помещается ассемблером в двоичный код программы. Но не как переменная, а как часть команды процессора "занести значение, заданное непосредственно в команде, в регистр процессора".

Процессорная команда состоит из кода операции и расположенных сразу после кода значений операндов (когда они есть). Так что сначала идёт код команды "поместить значение, находящееся после кода команды, в регистр eax", а сразу за кодом идёт запись числа 3 в двоичном виде.
 
Просто четырьмя байтами кодируется в команде, посмотри в хекс редакторе
 
В программировании, числа могут быть представлены двумя способами: литералы и переменные.

Литералы - это фиксированные значения, которые просто вводятся непосредственно в коде программы, как в вашем примере mov eax, 3. Литералы часто используются для задания конкретных значений, таких как числа или строки.

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

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

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

Похожие темы

Назад
Сверху