Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > С чего всё началось?


Автор: EnrolL 20.4.2005, 19:40
Привет всем!
Есть следуйщий вопрос, мен интеренсо с чего всё началось, пожалусат елси можно подробнее об этом::: я никак непойму откуда процессор знает, что куда делать, если С++ то тут ясно он был написан в ассме, ассм и руководить им грубо говоря, а как тогда сам ассм.

Зарание благодарин!

Автор: Caramel 20.4.2005, 19:46
Модератор:
EnrolL, проверяйте ваши сообщения прежде чем постить их в форуме. Это не русский язык. Это его суррогат. smile

Вашу вторую тему я удаляю.

Автор: Дрон 20.4.2005, 19:47
Цитата(EnrolL @ 20.4.2005, 20:40)
что куда делать

А может ещё рассказать откуда дети берутся smile smile smile
Добавлено @ 19:50
Сформулируй, пожалуйста, свой вопрос по-человечески, может тогда чего-нибудь толковое и расскажем smile

Автор: Caramel 20.4.2005, 19:50
Цитата
А может ещё рассказать откуда дети берутся

Это ты рядом топик организуй))))


EnrolL, я не поняла вашего вопроса smile

Автор: EnrolL 20.4.2005, 21:36
Сорри писал быстро, голодный, хотел успеть как побыстрее.
Нащёт детей, давай обьясни.
Я хотел спросить как процессор понимает код вернее язык ассемблера, а потом и С++, у него етсь своя память или что, просто немогу понять как люди это сделали, как он сам знает что делать. Блин тяжело обьяснить даже, ну там 0 и 1, как он понимает слово for puts и другие, как люди сделал так тчо б он это понимал.

Автор: batigoal 20.4.2005, 22:59
Тяжело ответить на такой вопрос... Почитай чего-нибудь по архитектуре процессора и машинным кодам... Могу скинуть институтский курс...

Автор: LSD 20.4.2005, 23:11
Если я тебя правильно понял, то тебя интересует как возникли компиляторы.
Вначале программы писали в машинных кодах (у меня препод по информатике до сих пор помнит некоторые команды). Потом появился ассемблер, и самый первый писался в машинных кодах. Последующие уже писались, с помощью предыдущих версий его же. Так же и многие компиляторы, или пишутся на предыдущей версии или на другом языке.

Автор: batigoal 20.4.2005, 23:14
Цитата(LSD @ 20.4.2005, 23:11)
Вначале программы писали в машинных кодах (у меня препод по информатике до сих пор помнит некоторые команды).

Мне тоже доводилось пробовать, на лабораторных стендах. Непередаваемые ощущения...

Автор: Vex 20.4.2005, 23:21
Цитата
Мне тоже доводилось пробовать, на лабораторных стендах. Непередаваемые ощущения...

Наверное чувствовал себя человеком забравшимся в святая святых или напримаер нейрохирургом? smile

Автор: LSD 20.4.2005, 23:25
Цитата(Vex @ 21.4.2005, 00:21)
Наверное чувствовал себя человеком забравшимся в святая святых или напримаер нейрохирургом?

Не, неандертальцем smile Огонь трением и все такое smile

Автор: EnrolL 21.4.2005, 00:12
Lamer George
Скинь плиззз
Да вы всё правельно поняли, так растолкуйте плиз на пальцах, как это делали они там что, за ниточки дёргали каиктео или как там каиетео электрические импульси, ну просто неясно откуда проц знает что от него хотят, откуда он занет тчо это 0 и 1, где у него память.

Автор: batigoal 21.4.2005, 10:12
Я покопаюсь дома. Не уверен, что эти лекции можно понять без объяснений, но хуже не будет. Вот схема простого процессора там точно есть.
Цитата(LSD @ 20.4.2005, 23:25)
Не, неандертальцем  Огонь трением и все такое

Я себя чувствовал придатком этого стенда. Этакий преобразователь шестнадцатеричных кодов в механические пальцевые усилия. smile

EnrolL
Скажу тебе по секрету <оглядываюсь по сторонам и перехожу на шепот>, я и сам до сих пор уверен, что без шаманизма не обошлось...

Автор: Дрон 21.4.2005, 10:25
Ок. Чуть по позже попытаюсь объяснить (не о детях smile ), если Lamer George не опередит smile

Автор: AgereS 21.4.2005, 10:32
Цитата(EnrolL @ 20.4.2005, 19:40)
мен интеренсо с чего всё началось

вначале было слово smile

Автор: Дрон 21.4.2005, 10:49
Итак.
Языки высокого уровня, такие как Паскаль или С++ сначала компилируются в машинные коды.
Как происходит компиляция это целый университетский курс, так что в двух словах объяснить сложно, но попрообую smile

Сначала исходный текст разбивается на "лексемы", т.е. находятся все слова for, do, переменные и прочие символы.
Дальше, грубо говоря, в компиляторе задано соответствие каждой комбинации слов и машинного кода.
Т.е., например, цикл for превращается в некоторый набор чисел, и т.д. Языки высокого уровня характерны тем, что из одной команды возникает довольно много машинного кода. Ассемблер, кстати, тут совсем не причём.

Язык ассемблера, грубо говоря, это запись машинных кодов при помощи слов, так называемых мнемоник. Там каждой команде соответсвует несколько байт в машинном коде. Например команде INC AX, соответствует один байт с шестнадцатеричным кодом 40.

Как именно выполняются машинные коды расскажу ещё чуть позже.

Автор: batigoal 21.4.2005, 11:00
Дрон
Валяй, у меня сегодня работы много smile

Автор: EnrolL 21.4.2005, 20:31
Цитата
Итак.
Языки высокого уровня, такие как Паскаль или С++ сначала компилируются в машинные коды.
Как происходит компиляция это целый университетский курс, так что в двух словах объяснить сложно, но попрообую smile

Сначала исходный текст разбивается на "лексемы", т.е. находятся все слова for, do, переменные и прочие символы.
Дальше, грубо говоря, в компиляторе задано соответствие каждой комбинации слов и машинного кода.
Т.е., например, цикл for превращается в некоторый набор чисел, и т.д. Языки высокого уровня характерны тем, что из одной команды возникает довольно много машинного кода. Ассемблер, кстати, тут совсем не причём.

Язык ассемблера, грубо говоря, это запись машинных кодов при помощи слов, так называемых мнемоник. Там каждой команде соответсвует несколько байт в машинном коде. Например команде INC AX, соответствует один байт с шестнадцатеричным кодом 40.

Как именно выполняются машинные коды расскажу ещё чуть позже.

Спасибо, чуть чтуь светлее стало, давай в тмо же духе.

Автор: Dexter 21.4.2005, 22:26
Цитата
ну просто неясно откуда проц знает что от него хотят, откуда он занет тчо это 0 и 1, где у него память.


Процессор же в принципе микросхема, тока сложная... Очень... На контакт поступает импульс 0 или 1, они обрабатываются и на выходе получаются то же 0 и 1, тока другие... Вобщем так, я думаю....

Автор: Дрон 22.4.2005, 00:40
Цитата(Dexter @ 21.4.2005, 23:26)
Процессор же в принципе микросхема, тока сложная... Очень... На контакт поступает импульс 0 или 1, они обрабатываются и на выходе получаются то же 0 и 1, тока другие... Вобщем так, я думаю....

Правильно думаешь smile
Вся цифровая электроника работает с двоичными числами, т.е. всё представляется в виде 0 и 1. И задача любого электронного устройства (проца, калькулятора, часов) заключается в преобразовании одних последовательностей нулей и единиц в другие.
Примитивнейшими элементами, из которых состоит простейший процессор являются блоки выполняющие операции И, ИЛИ, НЕ, а также регистры, хранящие данные (ну и позволяющие их изменять).

Читая команды из памяти, процессор переходит из одного состояния в другое. Состояние процессора это всего лишь число хранящееся во внутреннем регистре. А переходы между этими состояниями это выполнение каких либо логических операций над числами.

Всё работает так:
1. прочитал вход
2. выполнил одни действия И/ИЛИ/НЕ с битами входа и битами состояния и получил биты выхода
3. выполнил другие действия И/ИЛИ/НЕ с теми же битами и получил номер следующего состояния
4. запомнил состояние и вернулся к 1.

Состояния могут быть например такие:
- ожидание команды
- ожидание номера регистра назначения
- ожидание номера исходного регистра
- ожидание первого байта данных
- ожидание второго байта данных
и т.п.

Например в моей курсовой, где надо было спроектировать электронные часы, их "процессор" содержал всего семь состояний. Но и функций то у них кот наплакал smile
Вообще, всё это рассказывается в курсе теории автоматов.

Если есть какие-то вопросы и замечания, буду рад ответить.

Автор: EnrolL 22.4.2005, 04:03
Хоро а откуда он знает что 0 это 0 а не 1 и 1 это 1 а не наоборот. И что из себя представляет ригистр.И ещо где можно почерпнуть про микроэлектронику в краце, что б понять как эти импульси происходят.

Автор: Дрон 22.4.2005, 09:34
0 - есть напряжение
1 - нет напряжения

или наоборот смотря, что за устройство smile

Цитата(EnrolL @ 22.4.2005, 05:03)
И что из себя представляет ригистр.

Сам уже толком не помню.


Цитата(EnrolL @ 22.4.2005, 05:03)
И ещо где можно почерпнуть про микроэлектронику в краце, что б понять как эти импульси происходят.

В книжках, в интернете smile
Ничего конкретного посоветовать не могу.

Автор: batigoal 22.4.2005, 10:49
Цитата(EnrolL @ 22.4.2005, 04:03)
а откуда он знает что 0 это 0 а не 1 и 1 это 1 а не наоборот

Это зависит от способа кодирования, который, в принципе, может быть различным. Например, можно "договориться", что положительный заряд - это 1, а отрицательный - это 0. Или если есть заряд - 1, если нет - 0. Или намагниченный учаток - 1, размагниченный - 0. И т.д.

Цитата(EnrolL @ 22.4.2005, 04:03)
что из себя представляет ригистр

Регистры - группа блоков в процессоре, в которых он хранит данные, с которыми в данный момент работает. Сейчас наиболее распространены 32-разрядные процессора, но уже идут 64-разрядные. Это значит, что он оперирует 32-разрядными операторами и регистры у него такие же.
32 разряда - это возможность хранить последовательность из 32 нулей и единиц (1100100101010000...). То есть, по сути, регистр - это просто 32 примитивных ячейки.
Добавлено @ 10:56
Забыл я выложить инфу вчера. Пьяный был. Сейчас напоминалку поставлю.

Автор: Dexter 22.4.2005, 16:00
Цитата
Хоро а откуда он знает что 0 это 0 а не 1 и 1 это 1 а не наоборот.


Код

     1          1  1
   |---|      |------|
   |   |      |      |
_0_|   |_0__0_|      |_0_



Вот график напряжения на контакте процессора, вот нули и единицы обозначены, теперь понял как узнает?

Автор: batigoal 22.4.2005, 16:15
Кстати, в сетевых технологиях часто применяется так называемый манчестерский код. Объяснять не буду, просто скажу - его используют из-за того, что если в вышеприведенном способе будет несколько одинаковых символов подряд, то оборудование может "сбиться".

Автор: Dexter 22.4.2005, 17:24
Ну это я для простоты понимания...

Автор: EnrolL 22.4.2005, 21:22
Мммм...
Так а как проц понимает что слово for это слово fo, у него что етсь своя комбинация чесел 110010001110 - что то в виде этого. И как тогда понять какая алгоритм существует.

Автор: Dexter 22.4.2005, 21:29
фора в ассемблере нет, та все более примитивно... А если ты про языки высокого уровня, то конструкция фор переводится в конструкцию фор для ассемблера, а у ассемблера в свою очередь, каждому оператору соответствует набор нулей и единиц...

Автор: EnrolL 22.4.2005, 22:11
всё ясно, спасибо дрзья разжывали мне.

Автор: EnrolL 22.4.2005, 22:41
всё ясно, спасибо дрзья разжывали мне.

Автор: batigoal 24.4.2005, 20:08
Нашел наконец этот конспект. Там есть принципы построения ЭВМ, работы процессора, видов памяти и т.д., но здесь не прикрепить - больше мегабайта в архиве получается. Если есть у кого возможность, может, выложите на фтп?

Автор: dm9 28.4.2005, 19:45
Может, выложим smile Слать на ящик в профиле.

Автор: batigoal 28.4.2005, 20:35
ОК

Автор: dm9 3.5.2005, 02:53
Сорри, совсем из головы вылетело. Вот ссылка на скачивание

http://dm9.ru/vingrad/books/computer_architecture.rar

Размер - 1182 КБ.

Автор: Амортизатор 13.2.2006, 00:32
EnrolL, я думаю это как раз то, что тебе нужно. Компиляция, сборка.

http://is.ifmo.ru/download/kmake.pdf
Добавлено @ 00:34
Я попал сюда с поисковика и не обратил внимание на время последнего поста smile

Автор: xaoc2 28.4.2006, 03:03
Код

 
"Программа 1"
1----******
2----* AND *----4----****** 
     ******          * OR  *-----выход
3--------------------******


"Программа 2"
1----******
2----* OR *----4---- ****** 
     ******          * AND *-----выход
3--------------------******



А может быть с этого всё начиналось, с жёсткой логики?   AND имеет на выходе4  1 только если на входе1 и входе2  будут 1, а OR если хотябы на один из входов4 и входе3 будет 1
в итоге получаются програмки:

"Программа 1"
Входа и биты       
на них             выход
[1]   [2]   [3]                            
 0      0     0       0
 0      0     1       1
 0      1     0       0
 0      1     1       1
 1      0     0       0
 1      0     1       1
 1      1     0       1
 1      1     1       1


"Программа 2"
Входа и биты       
на них             выход
[1]   [2]   [3]                            
 0      0     0       0
 0      0     1       0
 0      1     0       0
 0      1     1       1
 1      0     0       0
 1      0     1       1
 1      1     0       0
 1      1     1       1
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)