Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2014, 16:32   #31
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Цитата:
Сообщение от lighting Посмотреть сообщение
MihalNik, хорошо, но в таком случаи, что такое этот "указанный адрес"? Естественно подразумевается то, как будет он реально выглядеть в случаи с if-ом? Пример с if-ом не принципиален, аналогичные ему или просто более сложные тоже подойдут. Интересует сам процесс, пусть даже на уровне железа.
Адрес - это отдельный, очень большой вопрос. Это может быть абсолютный адрес участка памяти с инструкциями или просто скачок на несколько штук инструкций (естественно, там записывается просто размер пропускаемого участка) назад/вперед.
Ну и если не понятно - инструкции записаны в памяти последовательным куском и по умолчанию (до встреч команд перехода) разбираются процессором "приблизительно" в том же порядке (там всякие сложные внутренние оптимизации, конвейеры и т.п.).
Ну а подробнее уже действительно только книжку/статьи по ассемблеру смотреть.
З.Ы.: я их не пишу.
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 16.05.2014, 16:41   #32
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от lighting Посмотреть сообщение
Пример с if-ом не принципиален, аналогичные ему или просто более сложные тоже подойдут. Интересует сам процесс, пусть даже на уровне железа.
Конструкция if(a==b) переводится в такую последовательность машинных команд:

1) Взять значения из оперативки (она вне процессора) по адресу a и b; если они равны - установить процессорный флаг ZF (zero flag) = 1 (в простых процессорах это было бы 3 отдельных команды). Как обычно, регистр (ячейка памяти в самом процессоре, для 64-битного процессора это 64 бита) RIP (register instruction pointer, указатель на текущую выполняемую команду в оперативке) увеличивается на размер текущей команды, допустим, 2 байта, и теперь указывает на следующую команду.

2) Если ZF = 1, изменить RIP на величину, указанную после этого машинного кода (в простых процессорах эту величину нужно отдельно загружать в специальный регистр). То есть если a==b, то дальше процессор будет выполнять команды с другого места программы.

Последний раз редактировалось ds.Dante; 16.05.2014 в 16:48.
ds.Dante вне форума Ответить с цитированием
Старый 16.05.2014, 16:46   #33
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
пусть даже на уровне железа.
далеко зайдём, но для этого нужно знать, именно "железо".
Функция & для пары бинарных чисел:
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
Функция ИЛИ ||
0 || 0 = 0
0|| 1 = 1
1 || 0 = 1
11 || 1 = 1
Функция сложения
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
Функция вычитания
0 + не0+1 = 1 & перенос
0 + не1+1 = 1
1 + не 1 + = не 10
0x1 + 0xE + 1 = 1 + перенос.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.05.2014, 16:46   #34
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Эмуляторы, выполняют команды, на уровне машинных кодов, но только последовательно, по мере поступленя и расшивровки команд языка, более высокого уровня.
Вот именно - эмуляторы
Сама программа процессором не выполняется, и никак не переводится ни в псевдокод, ни в машинный код. Ну максимум что - байт-код, но это просто другой вид программы, который дальше до процессора не доходит, а отрабатывает в песочнице виртуальной машины.
Цитата:
В статье которую вы предлагаете, есть объяснения процесса сравнения строк, о котором вы говорите?
Я код выдернул оттуда. Если он тебе ничего не поясняет - нет.
Цитата:
Т.е. вы утверждаете что железо имеет смысл в данном аспекте только как некий базис списка кодов процессора
Именно. Понятное дело что все все все в компе обрабатывается процессором. Но если делить на уровни абстракции, далеко не каждая программа непосредственно обрабатывается железом. Как раз интерпретаторы становятся прослойкой между программой и железом, и команды железо получает уже не из самой программы а от интерпретатора. И как правило от команд самой программы там ничего нет. Или вернее одна команда для интерпретатора может заставить его всыпать процессору тучу разных команд, чтоб добиться результата, максимально схожего с пониманием исходной команды самим человеком. Поэтому я утверждаю что уровни абстракции программ важно понимать, и не мешать в кучу native-код и псевдокод.
Цитата:
Интерпретаторы и джиттеры так или иначе переводят программу в двоичный код.
Интерпретаторы ничего не переводят )
http://ru.wikipedia.org/wiki/%D0%98%...82%D0%BE%D1%80
Они сами являются исполнителями, причем непосредственными. А вот компиляторы которые как раз переводят из одного кода в другой ничего не исполняют.
Запуск и отладка не в счет, ибо этим занимается сама операционка, непосредственно работая с скомпилированной программой. А вот программа для интерпретатора к операционке не имеет никакого отношения, поэтому интерпретаторы так популярны в виду своей природной кроссплатформенности.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.05.2014, 16:46   #35
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

понавырывали фраз .. а мне вот как и автору не понятно
ну как же компьютер понимает что такое условие if? ааа?
eval вне форума Ответить с цитированием
Старый 16.05.2014, 16:51   #36
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

вот вы пишите что оно смотрит на код и сверят со словарем...
а как сверяет, ифом? етитькалатить, а как же оно понимает не тот иф в коде, а свой?
опять тупик, или есть еще кто-то к то еще выше проверят уже со своим словарем?
ок, а как он проверяет, опять ифом? мама помоги.... где конец?:
eval вне форума Ответить с цитированием
Старый 16.05.2014, 16:52   #37
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
понавырывали фраз .. а мне вот как и автору не понятно
ну как же компьютер понимает что такое условие if? ааа?
В схеме сумумматора, стоит триггер переноса. Если результат не даёт перенос, то он положителен, если тригггер сработал, результат отрицателен.
Зачем Вам это нужно? Хотите как и мы посвятить себя "купанию в железе"? Похвально, но сочувствую.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.05.2014, 16:54   #38
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

тут до симутаторов еще далеко, мы еще иф не знаем как разкурить
eval вне форума Ответить с цитированием
Старый 16.05.2014, 16:54   #39
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Интерпретаторы ничего не переводят )
http://ru.wikipedia.org/wiki/%D0%98%...82%D0%BE%D1%80
Они сами являются исполнителями, причем непосредственными. А вот компиляторы которые как раз переводят из одного кода в другой ничего не исполняют.
Исполнителем является процессор. А интерпретаторы занимаются интерпретацией, то есть переводом отдельных команд языка в команды процессора. Отличие от компилятора только в ленивости процесса.
ds.Dante вне форума Ответить с цитированием
Старый 16.05.2014, 16:59   #40
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мы еще иф не знаем как разкурить
Не надо лезть в дебри процессора. Итак понятно что все через него идет. Еще раз предложу - абстрагируйтесь. Попробуйте для начала заменить комп некой системой, и посмотрите как она будет работать, какие потоки данных куда пойдут.
Цитата:
Исполнителем является процессор. А интерпретаторы занимаются интерпретацией, то есть переводом отдельных команд языка в команды процессора. Отличие от компилятора только в ленивости процесса.
Тогда это что?:
Цитата:
Интерпрета́ция — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения)
Или в Википедии информация не имеющая доверия?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04