Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Технический флейм » Самая большая legacy |
<<Назад Вперед>> | Страницы: 1 2 3 * 4 | Печать |
DrPass
Advanced Member
Откуда: Донецк Всего сообщений: 3566 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 17 апр. 2005 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 марта 2013 21:17 Сообщение отредактировано: 16 марта 2013 21:18
Fe-Restorator написал: Ну чего? M$ Visual C++ еще годится для процедурного, и Embarcadero Delphi все еще в строю. Назови хоть один ЯВУ-компилятор, помнящий процедурное программирование С работой на старых процах действительно есть нюанс. Если ассемблеры еще имеют опции для генерации кода, бинарно совместимого со старыми процами, то современные компиляторы ЯВУ обычно не имеют. Это не так плохо, т.к. они благодаря использованию современных инструкций делают более компактный и шустрый код, но всё-таки... Кстати, вот DOS Logic привел интересный пример оптимизации. Программист на ассемблере обычно знает инструкцию LOOP и использует ее. А компилятор при компиляции циклов возьмет регистр-счетчик и будет его декрементировать инструкцией DEC. Почему? А потому что так на самом деле быстрее, чем LOOP Или тот же самый цикл, допустим, от 0 до 100. Программист возьмет переменную (или регистр, если на ассемблере), присвоит ей значение 0 и будет увеличивать, сравнивая со значением 100 на каждой итерации. Компилятор сначала проверит, насколько в цикле важен порядок его следования, и если не важен, возьмет регистр, запишет туда 100 и будет уменьшать до 0. Потому что сравнение с 0 также намного быстрее, чем сравнение с константой. Поэтому сейчас есть забавный факт: компиляторы умнее среднего ассемблерщика. La Forge написал: Не все регистры, а регистры общего назначения. Их можно произвольно использовать в операциях работы с памятью, арифметики, сравнения, но при этом своя узкая специализация в ряде инструкций у них все же есть. Например, CX автоматически используется как счетчик в упомянутой выше LOOP и в строковых операциях, DX - единственный регистр, который может указывать номер порта для ввода-вывода, а BX можно использовать для косвенной адресации внутри текущего сегмента. На асм-е я прогфессионально не программил, но из институтского курса припоминается, что в принципе регистры на деле можно использовать любые и не по-прямому назначению. Например для счётцика циклов насколько я помню, обычно используестя CX, но вподе бы пользовали любые и препод говорил, что назначение конкретного - просто дань традиции |
Fe-Restorator |
NEW! Сообщение отправлено: 16 марта 2013 22:09 Сообщение отредактировано: 16 марта 2013 22:12
DrPass написал: Не настолько-уж они современные, не умеют одновременно с "чисто 486" особенностями программировать "множество потоков под ядра i7", например. Либо одно, либо другое. Более того, ассемблеры тож перестали содержать опции, генерирующие код под 386-486, и винить их за сей "промах" по меньшей мере - безосновательно. M$ Visual C++ еще годится для процедурного, и Embarcadero Delphi все еще в строю. DrPass написал: Снова вопрос об виртуозности программиста, а не об ТТХ проца/компилятора! Хороший программист изучил сию особенность архитектуры, и заранее "вывернул цикл наизнанку", в точности, как это делает компилятор, одновременно, выиграв десяток тактов/циклов у того-ж компилятора. Более того, компилятор создавался и оптимизировался именно на основе приёмов эффективного программирования квалифицированными людьми. Иначе - мгновенно получается Болген-ОС, или как её там зовут... Программист на ассемблере обычно знает инструкцию LOOP и использует ее. А компилятор при компиляции циклов возьмет регистр-счетчик и будет его декрементировать инструкцией DEC. Почему? А потому что так на самом деле быстрее, чем LOOP |
Сейчас на форуме |
User 0
Junior Member
Откуда: Moscow Всего сообщений: 112 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 25 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 марта 2013 22:20 Сообщение отредактировано: 17 марта 2013 23:24
DrPass написал: Когда я приобрел компьютер на базе Celeron 1,2 ГГц, мне стало интересно посчитать его производительность по старому принципу «сложение „регистр+регистр”». Я написал программу, где блок из 16384 команд целочисленного сложения множество раз вызывался из LOOP-цикла. И, по-моему, именно эта программа на Celeron выполнялась гораздо дольше, чем на AMD K6-166. Может, из-за особенностей устройства конвейера, не знаю точно. А потому что так на самом деле быстрее, чем LOOP |
Fe-Restorator |
NEW! Сообщение отправлено: 16 марта 2013 22:25 Сообщение отредактировано: 16 марта 2013 22:28
User 0 написал: Сферическая лошадь в вакууме. Текст программы где? И, по-моему, именно эта программа на Celeron выполнялась гораздо дольше, чем на AMD K6-166. Вот, селерон-800, заторможенный аппаратно до 200, выполняет ASM-проги медленнее, чем первопень 200. Зато, доступ к памяти за пределом мегабайта у щелерона выше, несмотря на искусственную заторможенность. Исчаз мене кето-то выскажет ценнейшую мыслю об фиксированности множителя щелеронов... |
Сейчас на форуме |
Fe-Restorator |
NEW! Сообщение отправлено: 16 марта 2013 22:46
Ну, в щелеронах регистры EAX, а не просто AX, как в твоей проге, и при вызове "полрегистра" всякий раз срабатывает автообнуление старших битов, что есмь опция/фича компилятора... А ежли не быто перекомпиляции под щелерон - то отбрасывание старших битов при вызове биос-функций, те-ж |
Сейчас на форуме |
User 0
Junior Member
Откуда: Moscow Всего сообщений: 112 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 25 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 марта 2013 22:50 Сообщение отредактировано: 16 марта 2013 23:33
Fe-Restorator написал: Это не так. При обращении к AX в любом режиме старшее слово EAX остается неприкосновенным (как и старший байт AX при обращении к AL). и при вызове "полрегистра" всякий раз срабатывает автообнуление старших битов, что есмь опция/фича компилятора |
La Forge
Advanced Member
Lt. Cmdr. Откуда: Рязань Всего сообщений: 3248 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 16 нояб. 2012 |
Fe-Restorator учите матчась. Регистры EAX. EBX и т.д. появились в 386-м. И пень и селерон и вообще любой 32-х разрядный проц их содержит |
User 0
Junior Member
Откуда: Moscow Всего сообщений: 112 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 25 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 марта 2013 23:33 Сообщение отредактировано: 17 марта 2013 8:59
La Forge, спорим, что не любой 32-разрядный . У меня есть ARM, но в нем нет EAX. По поводу матчасти: компьютеры и программы к ним стали настолько сложны, что невозможно быть компетентным во всех областях, как 30 лет назад. |
La Forge
Advanced Member
Lt. Cmdr. Откуда: Рязань Всего сообщений: 3248 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 16 нояб. 2012 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 марта 2013 23:51 Сообщение отредактировано: 16 марта 2013 23:54
АРМ это не процы, а так,выдри...ки. Паразитирующая архитектура живущая по принципу "у кого бы чего содрать?". И пусть сейчас их много...ну так жуков колорадских тоже много. И это временно. (я не про жуков ) Тут я только ЗА Только бы не смешивать в ходе диалога предположения и догадки с фактами |
Fe-Restorator |
NEW! Сообщение отправлено: 17 марта 2013 0:10 Сообщение отредактировано: 17 марта 2013 0:43
User 0 написал: Fe-Restorator написал: Это не так. При обращении к AX в любом режиме старшее слово EAX остается неприкосновенны Читай внимательнее: компилятора, а не проца! Проц тупой, автоматически почти ничего не умеет в плане подмены кода! Однако, на обнуление тратятся такты, например: XOR EAX,EAX, MOV EAX,1... Причём, сперва нужно привести конструкцию MOV AL,2 к виду MOV EAX,0002h!!! автообнуление старших битов, что есмь опция/фича компилятора... ЗЫ. Все мы, хором, отклонились от темы. ТС вопрошал, будет-ли код отличаться, и правильный ответ - будет, однозначно. Даже при оптимизации "под старый проц". Ибо по конструкции MOV EAX,0002h трудно определить, адресуется весь AX или только его половинка, AL/AH!!! Более того, компилятор уже заточен оперировать половинками EAX, т.е. целыми регистрами 8086, без деления на их половинки, и на 8088 такой код неоперабелен, на 60% минимум. Иными словами, у современных процов давно-уж нет "наследия 8086", в том виде, как сие утверждал ТС. Говорить, что i7 строго следует "архитектуре и принципам 8086" - неверно, принципиально! Современные процы поддерживают программирование "в стиле х8086", ценою потери 97% производительности всего компа. La Forge написал: Сделай сие смостоятельно, ОК? Листинг, приведённый ТС вообще EAX не содержит, об чём пляшет весь мой пост. Запроси его у ТС, зря он спрятал листинг под "требование через ЛС". Fe-Restorator учите матчась. И впредь, знай, где звон, прежде, чем его услышишь. |
Сейчас на форуме |
<<Назад Вперед>> | Страницы: 1 2 3 * 4 | Печать |
Полигон-2 » Технический флейм » Самая большая legacy |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |