Babas Abasov
Профи
(853)
12 лет назад
Компьютер содержит электронные схемы, с помощью которых соединены клавиатура, экран, модули обработки и памяти.
В схемах присутствуют электрические сигналы.
Сам компьютер ничего, конечно, не понимает.
Его электронная начинка обрабатывает сигналы.
Язык разбили на слова, в соответствии с которыми те или иные сигналы должны поменяться, вызывая предопределённые действия. Слова на буквы. Компьютер умеет сравнивать наличие и отсутствие сигналов. А значит может распознать буквы, а значит и слова.
Но если Вы серьёзно хотите с этим разобраться, то лучше обратитесь к Википедии. Читая одну статью за другой, и задавая себе вопросы -- что теперь не понятно? --Вы быстрее составите для себя правильныю картину. Самостоятельная работа для ума полезнее.
См. "Вычислительные системы" в Википедии.
Источник: опыт друг ошибок трудных
Leonid
Высший разум
(389299)
12 лет назад
Научили, создав программу, которая переводит "слова" языка программирования в машинные коды, которые уже понятны для компьютера.
Как правило, любая элементарная инструкция компьютеру, на самом нижнем уровне, состоит из кода команды и, возможно, кода данных. Например, "прочесть данные из памяти по адресу Х в регистр А", "сложить данные из регистров А и В и поместить сумму в регистр С", "сравнить содержимое регистров А и В", "сдвинуть содержимое регистра А на N разрядов влево" и т. д. То есть даже на таких простых примерах видно, что любая инструкция - это команда (ЧТО сделать) и данные (С ЧЕМ это надо сделать) . И то, и другое есть числа. С данными и так понятно, что это числа, а с командами тоже просто: каждой команде ставится в соответствие определённое число - ведь набор команд всегда ограничен, а значит, их можно просто перенумеровать. Обратите внимание, что некоторым инструкциям не нужны данные. Скажем, команда СБРОС или ОСТАНОВ вполне обойдутся без каких-либо данных. А в однорегистровых процессорах (сейчас таких и не осталось, а вот я начинал с PDP-8, где регистр данных был всего один... ) таких команд было множество, как раз потому, что регистр - один. Поэтому команды инвертирования, сдвига, логических операций и т. п. могли относиться только к этому регистру.
Ну а дальше всё просто: раз каждой команде машинного языка можно поставить в соответствие конкретное число, то точно так же ей можно поставить в соответствие конкретное СЛОВО, которое для человека имеет некоторый смысл. То есть вместо команд 000, 001, 010... можно использовать AND, TAD, ISZ и т. д. (это реальные обозначения команд той самой PDP-8; поскольку памяти в ней было совсем мало, проходилось использовать короткие обозначения команд) . Ну и раз каждой команде соответствавло своё конкретное буквенное обозначение, то не штука было написать программу, которая САМА переводила эти буквенные обозначения в двоичные инструкции. Именно так работает ассемблер - язык программирования самого низкого уровня.
Но на ассемблере писать ОЧЕНЬ СЛОЖНО, потому что а) под каждый конкретный процессор (компьютер) нужен свой ассемблер, и б) ассемблерная программа - это список инструкций 1:1. То есть КАЖДОЕ действие компьютера придётся расписывать по командам ПОЛНОСТЬЮ. Нельзя сказать "прочитать такой-то файл в память", нужно ПОДРОБНО расписать, как распознаётся имя файла, как обратиться к диску, чтобы узнать, где этот файл лежит, как узнать длину файла, как задать адрес начала массива в памяти, как потом запихать все байты файла в ячейки памяти, как на каждом шаге проверять, не закончился ли файл/не переполнился ли массив.. . В общем, кошмар.
Вот поэтому и появились языки программирования высокого уровня (первым это создал К. Цузе ещё в 1941 году) , которые оперируют понятиями, "отвязанными" от конкретных команд машинного уровня и конкретной организации памяти. Поэтому на таком языке уже можно написать "ReadFile (text.doc, ^array)" - и программа-транслятор (не компиллятор! ) САМА переведёт эту инструкцию в ассемблерный код. Потом уже этот кусок ассемблерного кода можно соединить с другими модулями, в частности, стандартными библиотечными модулями (многие типовые операции - работа с клавиатурой и экраном, дисковое чтение/запись, распределение памяти.. . -заранее оттранслированы в машинные коды) . Поэтому следующий этап - это линковка (linking), когда написанный кусок программы связывается с библиотекой и другими кусками программы (если программа сложная) .
А компилятор и интерпретатор - это РАЗНЫЕ ТИПЫ языков высокого уровня. Компилятор (С, Паскаль, Модула, Дельфи) СНАЧАЛА распознаёт текст программы и создаёт промежуточный файл, из которого потом, после линковки, получается исполняемый файл программы. А интерпретатор (Фокал, Бэйсик) распознаёт команды "по ходу дела" и выполняет их одну за другой без того, чтобы предварительно обработать всю программу.
очень прошу помогите
понимаю что программы создают с помощью программирование
а как компьютер научили языку программирование как??? ?
спасибо всем