Вот есть переменные. А есть просто числа. Откуда берутся именно сами числа? Допустим напишем:
mov eax, 3
И откуда взялась эта 3? Она помещается компилятором прямо в машинный код программы, как переменная? Но компилятор ведь тоже программа. И как и любая программа - она выполняется команда за командой.
Значит ли это, что у процессора есть как минимум 255 однотипных команд типо: "добавить 1", "добавить 2", "добавить 3", "добавить 4" итд?
Другие языки программирования и технологии
Откуда в программировании числа?
Да, эта 3 помещается ассемблером в двоичный код программы. Но не как переменная, а как часть команды процессора "занести значение, заданное непосредственно в команде, в регистр процессора".
Процессорная команда состоит из кода операции и расположенных сразу после кода значений операндов (когда они есть). Так что сначала идёт код команды "поместить значение, находящееся после кода команды, в регистр eax", а сразу за кодом идёт запись числа 3 в двоичном виде.
Процессорная команда состоит из кода операции и расположенных сразу после кода значений операндов (когда они есть). Так что сначала идёт код команды "поместить значение, находящееся после кода команды, в регистр eax", а сразу за кодом идёт запись числа 3 в двоичном виде.
У процессора есть одна команда на сложение, "добавить 1". Грубо говоря так. Это если про операцию сложения
И - как "откуда взялись числа"? С них всё началось. Компьютеры создавались сначала как "мощные и быстрые калькуляторы"
Числа просто-напросто пишутся в память. Сначала писались теми же 0 и 1 ("нет сигнала - есть сигнал"), а потом навертели сверху языков программирования, компиляторов, и т.д., и стало возможным написать сразу 3, а остальное сделает программа
И - как "откуда взялись числа"? С них всё началось. Компьютеры создавались сначала как "мощные и быстрые калькуляторы"
Числа просто-напросто пишутся в память. Сначала писались теми же 0 и 1 ("нет сигнала - есть сигнал"), а потом навертели сверху языков программирования, компиляторов, и т.д., и стало возможным написать сразу 3, а остальное сделает программа
Іван Нечай
То есть компилятор выполняет три раза команду "добавить единицу"?
Я тебе больше скажу. Даже команта mov это "число". Это код программы, где указана команда в виде двоичного кода, а за ним идет сам операнд - тоже число в двоичном коде. Либо непосредственно число, либо адрес, по которому располагается число.
Іван Нечай
Действительно. Но от этого вопросов стало ещё больше. На чём создана самая первая версия компилятора ассемблера?
Просто четырьмя байтами кодируется в команде, посмотри в хекс редакторе
Сча твой будильник зазвенит. Кубит, не ион.
Она помещается процессором прямо в регистр ...
>И откуда взялась эта 3?
Из исходного кода программы
>Значит ли это, что у процессора есть как минимум 255 однотипных команд типо: "добавить 1"...
Это значит, что у процессора есть несколько вариантов команды mov, один из которых состоит из опкода (размером в байт в конкретном случае и значением b8) + параметра (размером 4 байта также для этого случае), где этот самый параметр - то самое число из исходника.
Это не означает, что в бинарном коде ассемблера нужно куда-то вставлять 4 миллиарда команд размером по 5 байт, которые перечисляют все возможные комбинации параметров
Из исходного кода программы
>Значит ли это, что у процессора есть как минимум 255 однотипных команд типо: "добавить 1"...
Это значит, что у процессора есть несколько вариантов команды mov, один из которых состоит из опкода (размером в байт в конкретном случае и значением b8) + параметра (размером 4 байта также для этого случае), где этот самый параметр - то самое число из исходника.
Это не означает, что в бинарном коде ассемблера нужно куда-то вставлять 4 миллиарда команд размером по 5 байт, которые перечисляют все возможные комбинации параметров
Это называется константа. Если на уровне ассемблера - значение, хранящееся по указанному адресу. Адрес, если что - это в ассемблере имя переменной. А значение, хранящееся по этому адресу может быть просто числом, а может быть адресом другой константы или переменной. Или адресом вызова процедуры - это уже по контексту программы.
Іван Нечай
Адрес имеет переменная. Ты про переменные говоришь. А само число откуда попадает в этот адрес?
Дилшодбек Милляджанов
А ваше mov eax, 3 - это вы просто поместили в регистр число 3. И дальше оно может быть чем угодно - просто числом, адресом, частью команды
В программировании, числа могут быть представлены двумя способами: литералы и переменные.
Литералы - это фиксированные значения, которые просто вводятся непосредственно в коде программы, как в вашем примере mov eax, 3. Литералы часто используются для задания конкретных значений, таких как числа или строки.
Переменные - это именованные контейнеры, которые хранят значения, которые могут изменяться во время выполнения программы. Переменные в программировании используются для хранения значений, с которыми мы хотим работать или которые можем получить из других источников, таких как пользовательский ввод или база данных.
Когда мы пишем mov eax, 3, компилятор вставляет значение 3 в машинный код программы. Это может быть закодировано с использованием набора инструкций процессора, которые выполняют операцию загрузки значения непосредственно в регистр. Процессор обрабатывает этот машинный код и выполняет операцию, загружая значение 3 в регистр eax.
Процессоры обычно имеют инструкции для выполнения различных операций, таких как сложение, вычитание, умножение и другие, но они не имеют отдельных инструкций для каждого возможного числа. Вместо этого, числа могут быть представлены в различных форматах (например, двоичный, шестнадцатеричный или десятичный) и обрабатываться с использованием инструкций процессора для работы с такими числами. Таким образом, процессоры не имеют отдельных команд для каждого возможного числа.
Литералы - это фиксированные значения, которые просто вводятся непосредственно в коде программы, как в вашем примере mov eax, 3. Литералы часто используются для задания конкретных значений, таких как числа или строки.
Переменные - это именованные контейнеры, которые хранят значения, которые могут изменяться во время выполнения программы. Переменные в программировании используются для хранения значений, с которыми мы хотим работать или которые можем получить из других источников, таких как пользовательский ввод или база данных.
Когда мы пишем mov eax, 3, компилятор вставляет значение 3 в машинный код программы. Это может быть закодировано с использованием набора инструкций процессора, которые выполняют операцию загрузки значения непосредственно в регистр. Процессор обрабатывает этот машинный код и выполняет операцию, загружая значение 3 в регистр eax.
Процессоры обычно имеют инструкции для выполнения различных операций, таких как сложение, вычитание, умножение и другие, но они не имеют отдельных инструкций для каждого возможного числа. Вместо этого, числа могут быть представлены в различных форматах (например, двоичный, шестнадцатеричный или десятичный) и обрабатываться с использованием инструкций процессора для работы с такими числами. Таким образом, процессоры не имеют отдельных команд для каждого возможного числа.
Похожие вопросы
- Откуда взялась легенда про матан в программировании?
- Найти число Фибоначчи, ближайшее к заданному натуральному числу N. (программирование в языке Си)
- Почему числа в языках программирования называются константами?
- программирование pascal (паскаль) алгоритм с перестановкой цифр в числе
- Разработайте программу на любом доступном языке программирования вычисляющую наименьшее общее кратное двух чисел...
- Помогите решить задачу по программированию. Дано четырёхзначное число. Найти: а) сумму его цифр; б) произведение его циф
- Программирование ассемблер. Дан массив из 8 байт. Посчитать количество байт, в которых число нулей и единиц одинаковое
- Помогите пожалуйста! Задача по программированию. ВВОдится 1 число n. ВОзможны 2 действия над ним : 1)вычесть 1
- Вещественные числа и языки программирования
- Как выглядит алгоритм который можно записать на языке программирования который ищет закономерности в ряде чисел?