tag:blogger.com,1999:blog-1688132520265708820.post7058827711798392338..comments2023-04-02T16:52:35.787+03:00Comments on Блог GunSmoker-а (переводы): Архитектура x86 - очень страннаяGunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-1688132520265708820.post-45823543767705721102010-08-26T15:35:36.916+04:002010-08-26T15:35:36.916+04:00Я имел ввиду, что это исторический обзор, а не пра...Я имел ввиду, что это исторический обзор, а не практическое руководство.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-2955798073267530672010-08-26T15:31:17.370+04:002010-08-26T15:31:17.370+04:00> Да вроде как это не страшилки?
Ассемблерщика...> Да вроде как это не страшилки?<br /><br />Ассемблерщикам и системщикам всё равно менять большинство привычек даже при переходе на amd64, а прикладникам почти всё тут описанное - пофиг. Особенно количество регистров, да будь их хоть 2 хоть 100, кэш сейчас нивелирует разницу.<br /><br />Из того, что таки всплывёт в ближайшее время - это lock-free/wait-free/etc. алгоритмы, для которых важно именно отношение к упорядочению операций в памяти. Код для x86 не будет работать на RISC из-за отсутствия явного указания release semantics или другой подобной спецификации доступа. Но и то это крайне малое количество авторов.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-73062169130663750512010-08-24T12:10:15.924+04:002010-08-24T12:10:15.924+04:00Да вроде как это не страшилки?Да вроде как это не страшилки?GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-757301467023206282010-08-24T10:18:39.087+04:002010-08-24T10:18:39.087+04:00> x86 поддерживает атомарные операции типа загр...> x86 поддерживает атомарные операции типа загрузить-изменить-сохранить. Нигде больше такого нет.<br /><br />Неправда, Sparc тоже использует CAS. У остальных перечисленных действительно LL/SC.<br /><br />Вообще, из этих страшилок практически важно сейчас большинству только выравнивание.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-44006278769340497872010-08-13T04:41:36.249+04:002010-08-13T04:41:36.249+04:00> И, кстати, дельфи и "си билдер" по ...> И, кстати, дельфи и "си билдер" по умолчанию всегда использует именно "register" передачу. Почему-то, им "архитектура процессора" в этом никак не мешает.<br /><br />Чудак ты. Используют они это ровно потому, что это позволяет и _одобряет_ архитектура. А ну, попробуй мне передай параметры в регистрах, если это архитектурой не диктуется (к примеру, команда call обнуляет регистры или же свободных регистров нет, есть только preserved-регистры).Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-75569854765796624832010-01-04T03:11:28.922+03:002010-01-04T03:11:28.922+03:00>>> Блин, а чем расширения от "нерас...>>> Блин, а чем расширения от "нерасширений" отличаются?<br />В посте идёт речь об архитектуре x86. Я не знаю, зачем вы сюда приплетаете расширения. Расширение - это вполне самостоятельная и автономная единица, у неё своя архитектура. Например, MMX изначально разрабатывалась для RISC-процессора Intel i860 (её RISC-корни можно увидеть и сейчас). А FPU когда-то вообще был аппаратно другим процессором.<br />Нет, ради бога, если хотите - напишите сравнение архитектур вместе с расширениями (не забудьте тогда уж и расширения для RISC-процессоров - типа MDMX, MIPS-3D и т.п.) в настоящий момент. Только в формат/идею этого поста такое сравнение не будет укладываться. Это исторический пост.<br /><br />>>> И первая ваша ссылка по "регистрам" описывает проц 8086<br />Первая ссылка идёт на <b>серию</b> постов.<br /><br />>>> В скобках я указал дерективы компилятора паскаля и делфей, которые используют другие способы передачи параметров<br />Так, кажется я понял откуда сыр-бор. Вы неверно поняли фразу "x86 использует стек для передачи параметров функциям". Поясняю: эта фраза не означает, что в x86 ВООБЩЕ не используются регистры. Напротив, x86 как раз характеризуется наличием нескольких различных моделей вызовов (это более подробно описывается по ссылкам, приведённым выше), в <i>некоторых</i> из которых используются регистры. Указанную же фразу надо понимать так: другие архитектуры НЕ используют только стек для передачи параметров - они имеют единственную модель вызова, в которой параметры передаются регистрами (да, остаток - в стек, но всё равно там далеко не два-три регистра под параметры, а иногда десятки). Причём некоторые архитектуры не используют стек вообще, а только регистры (да, там есть регистровый стек, но это уже совсем другой зверь, аналога которому в x86 нет).<br /><br />>>> Там ведь тоже данные между процедурами в библиотеках стеком передаются!<br />Там данные передаются так, как диктуется архитектурой. А передача данных только стеком без регистров есть только в x86.<br /><br />Просто этот пост есть краткое резюме других постов, поэтому тут изложено сжато. Чтобы не было недопониманий, надо читать предыдущие посты по моделям вызова - там некоторые моменты разжёвываются подробнее.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-1817963400672271192010-01-04T02:31:22.169+03:002010-01-04T02:31:22.169+03:00"Это - расширения."
Блин, а чем расшире..."Это - расширения."<br /><br />Блин, а чем расширения от "нерасширений" отличаются? Отличие, imho, только в терминалогии... По факту - это регистры, который камень использует... <br /><br />"Да ну. Не путайте причину и следствие. Компилятор делает так, потому что это диктуется архитектурой. Архитектура - первична."<br /><br />Ну да! В скобках я указал дерективы компилятора паскаля и делфей, которые используют другие способы передачи параметров. И, кстати, дельфи и "си билдер" по умолчанию всегда использует именно "register" передачу. Почему-то, им "архитектура процессора" в этом никак не мешает.<br />И первая ваша ссылка по "регистрам" описывает проц 8086, а вторая описывает соглашения, использующиеся ещё во времена MSDOS. Даже Delphi 1 под Win16, между своими процедурами и BPL'ками, параметры передавала регистрами (ну, если регистров хватало). Хотя, в статье там даже написано, что описывается 16-битные соглашения о вызовах - а сейчас обычно используются 32\64 битные программы. <br /> Хотя, в сиподобных языках и библиотеках Windows данные передаются по стеку - но это не из-за архитектуры, а так просто исторически сложилось... Существуют ведь операционные системы Windows под "не х86-платформы"! Там ведь тоже данные между процедурами в библиотеках стеком передаются!AlnZhttps://www.blogger.com/profile/04024511757099280427noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-50658516343332350772010-01-03T15:15:41.196+03:002010-01-03T15:15:41.196+03:00>>> MMX, SSE, FPU - имеют свои регистры
Э...>>> MMX, SSE, FPU - имеют свои регистры<br />Это - расширения.<br /><br />>>> Да и с изменением разрядности количество регистров процессора как-бы увеличилось, ведь мы можем работать с "половинками" обычных регистров.<br />Обращение к половине регистра не делает его полноценным регистром. Новых регистров нет. Есть увеличение разрядности.<br /><br />>>> Это к архитектуре x86 никакого отношения не имеет, вообще-то... За это компилятор отвечает<br />Да ну. Не путайте причину и следствие. Компилятор делает так, потому что это диктуется архитектурой. Архитектура - первична.<br />Посмотрите ещё <a href="http://transl-gunsmoker.blogspot.com/2008/12/1.html" rel="nofollow">эту серию</a> и <a href="http://transl-gunsmoker.blogspot.com/2008/12/x86.html" rel="nofollow">этот пост</a>.<br /><br />>>> Странно, даже в Z80 такие операции присутствовали! )))<br />Наверное, это не удивительно. Если учитывать, что Z80 был создан как клон 8080, ушедшими из Intel сотрудниками? Новый процессор изначально создавался совместимым с 8080 (с дополнительным набором команд).<br /><br />>>> сложилось впечатления, что сравнивается CISC-архитектура с несколькими RISC-архитектурами<br />Да, именно так.<br />Наверное это потому, что сложно назвать <i>другую</i> распространённую CISC-архитектуру, кроме x86? ;) (на ум приходят только динозавры из 70-х). В то время, как RISC - это ARM (пример: Apple iPod, iPhone и т.п.), MIPS (PlayStation), Sun-ский SPARC и т.д.<br />x86 странная именно потому, что это CISC. В то время, как почти все другие архитектуры являются RISC. Да, с точки зрения другой архитектуры, странно всё то, что не совпадает с твоим собственным. Но в общей куче архитектур выделяется именно x86, а не другая. Об этом и пост.<br /><br />P.S. Ну, внутренне новые x86 процессоры выполняются в определённом RISC-стиле, хотя внешний программный интерфейс не изменялся.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-11859065637878936462010-01-03T08:33:50.914+03:002010-01-03T08:33:50.914+03:00"x86 имеет небольшое количество (8) регистров..."x86 имеет небольшое количество (8) регистров"<br /><br />Наверно, автор ведёт речь про 8086! ))) MMX, SSE, FPU - имеют свои регистры... Да и с изменением разрядности количество регистров процессора как-бы увеличилось, ведь мы можем работать с "половинками" обычных регистров.<br /><br />"x86 использует стек для передачи параметров функциям; все прочие используют регистры."<br /><br />ээээ... Это к архитектуре x86 никакого отношения не имеет, вообще-то... За это компилятор отвечает. Вот, в том-же паскале или дельфи использует передачу параметров именно по регистрам, хотя можно их передавать и по другому, используя специальные директивы компилятора (register, pascal, cdecl, stdcall, safecall и т.д.)<br /><br />"x86 поддерживает атомарные операции типа загрузить-изменить-сохранить. Нигде больше такого нет."<br /><br />Странно, даже в Z80 такие операции присутствовали! )))<br /><br />И вообще, сложилось впечатления, что сравнивается CISC-архитектура с несколькими RISC-архитектурами. (решил так по списку отличий - атомарные операции, строгая модель памяти, большое количество регистров, инструкции фиксированного размера - всё это "визитная карточка" именно RISC архитектуры) Понятно дело, что с точки зрения одной архитектуры, другая всегда будет "Странной". :)AlnZhttps://www.blogger.com/profile/04024511757099280427noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-52845345185623634592009-07-21T16:24:22.313+04:002009-07-21T16:24:22.313+04:00x86 странная только без - тx86 странная только без - тLivithanhttps://www.blogger.com/profile/08480181693612539996noreply@blogger.com