|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 12:43 am
| Автор |
Съобщение |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Tour of ARM Assembly
_________________ Мразя да мразя ...
|
| Нед Юни 22, 2014 10:20 am |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Tour of ARM Assembly
На АРМ не мога да схвана защо няма комплект CALL/RET с автоматично запазване/възстановяване на адреса за връщане. Толкова много транзистори и ток ли спестява? Или на мене нещо ми убягва?
|
| Сря Юни 25, 2014 3:30 pm |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Tour of ARM Assembly
Не ти убягва. Това е една от многото тъпотии в архитектурата
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Юни 25, 2014 3:34 pm |
|
 |
|
DanielDimov
Ранг: Почетен член
Регистриран на: Нед Фев 16, 2014 3:36 pm Мнения: 953
|
 Re: Tour of ARM Assembly
не забравяйте че тази архитектура е мислена не да му е удобно на програмиста на асемблер, а да е проста и с малко инструкции (и съответно малко транзистори и малка консумация) да вади голяма изчислителна мощност
|
| Сря Юни 25, 2014 4:11 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Tour of ARM Assembly
Първо, АРМ са вече 8 (осем) различни архитектури, не е зле да се уточнява за коя говорим... Да предположим че става дума за v7.. Второ, не е ясно кой адрес искаш да се спасява. Да предположим, че става дума за адреса за връщане на викащата, а не виканата процедура (втория се запазва в LR при BL/BLX инструкциите). Трето, ако трябва да се спасява нещо, то това е регистър, а не "адрес". Четвърто, при условие че се ползва концепция за универсални регистри, не виждам по каква логика трябва да има специални инструкции за един конкретен такъв. Кой е казал, че само LR трябва да се спасява? Пето, какво ще се спасява не се определя от викащия, а от викания. Демек няма как викащия и неговата инструкция за викане да се занимава със спасявания. Шесто, инструкцията за връщане се изпълнява в контекста на викания и естествено там се знае какво ще възстановява и естествено има такава инструкция ( POP {rx... , pc} ) В крайна сметка, стандартно при ARM пролога на една функция е една опционална PUSH 16-бит инструкция, в която се спасяват нужните регистри. А епилог по принцип няма нужда, тъй като с една 16-бит инструкция се възстановят регистрите и се връща управлението. Ако това не ви се струва оптимално, значи търсете си по-добра архитектура 
|
| Сря Юни 25, 2014 4:33 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Tour of ARM Assembly
Зачитах М куртексите, не знам коя v?x e . Демек за всяка вложена процедура трябва да правиш push и pop. Нямам представа как това хаби флаша в едно по-сериозно приложение , просто запазването на PC+ в стека като не става автоматично - много ли икономии са направили? И как това се отразява на флаша при по-сериозно приложение. Например w T-mos за АРМ - колко такива push/pop има? Други въпроси нямам 
|
| Сря Юни 25, 2014 8:11 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Tour of ARM Assembly
Гледай сега, ама хич не си прав  - архитектурата е мислена от програмист, пък бил той и гей ... и е изключително удобна за асемблер и не чак толкова за компилатори - отвсякъде бие х86, но спрямо 68к и дедо му PDP11 и липсва малко елегантност (Power, Sparc, MIPS - не ги познавам достатъчно, че да си позволя сравняване) - простотата е защото са я мислили като духовен наследник на 6502 съответно няма микрокодове и т.н. алабализми, и точно заради това е сравнително стабилна през годините - малкото транзистори не са били цел ами страничен ефект от дизайна на хартия - малката консумация въобще не е била цел по време на първоначалния дизайн (80-те) - слествие е от елегантния инструкшън сет и малкия брой транзистори - арм не вади много голяма изчислителна мощ на такт - но е повече от приличен на ват  Разгледай малко дизасемблиран оптмизиран до дупка Ц код на арм и х86 и ще разбереш какво имам в предвид ...
_________________ Мразя да мразя ...
|
| Сря Юни 25, 2014 9:16 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Tour of ARM Assembly
Това всъщност е едно от хитрите неща в архитектурата - позволява малки подпрограмки да не правят запис в стека. И на мен като идващ от х86 в началото ми беше странно, но с времето осъзнах всъщност колко е тарикатско. Друга причина е, че така се унифицира инструкшън сет-а ... е сложили са една кръпка BL която заменя 2 инструкции с 1, че иначе народа щеше да пищи още повече 
_________________ Мразя да мразя ...
|
| Сря Юни 25, 2014 9:19 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Tour of ARM Assembly
Thumb е друга бира ... скопен инструкшън сет за да се навре в 16 бита - т.е. кода става по малък с около 30% като байтове, но и с 30% повече като брой инструкции/тактове. Спорно е дали освен спестените центове от по малкия флаш има някаква дуга съществена полза.
_________________ Мразя да мразя ...
|
| Сря Юни 25, 2014 9:23 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: Tour of ARM Assembly
И голяма пръчка за реализиране на superscalar / out-of-order.  По този критерий Power > MIPS >> ARM.
|
| Сря Юни 25, 2014 9:38 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Tour of ARM Assembly
7-а но пак зависи, щото М0 са с доста постен инструкшън сет... Напротив, не трябва. Нали това е идеята адреса за връщане да не се пъха задължително в стека, а се ползва регистър. Имаш няколко вариата: 1. Leaf процедура, демек не такава дето не вика под-процедури. В тоя случай адреса за връщане си стои в регистъра и няма нужда да го претакваш през стека изобщо. 2. Процедура, която вика само една процедура непосредствено преди да излезе. В тоя случай просто jump-ваш и адреса за връщане не се променя 3. Процедура която вика повече от една или една, ама не на накрая. В тоя случай само ти трябва PUSH, но PUSH-а може да пушне много регистри наведъж и обикновено тоя push така или иначе ти трябва в началото на процедурата. Така че трудно може да говорим за някакъв овърхед. За POP пък още по-малко, защото той се съчетава с return. Примерно изглежда така: В случая се спасяват няколко регистура и адреса за връщане. При излизане се възстановяват регистрите, но вместо да се възстанови линк регистъра директно се pop-ва програмния брояч, т.е. имаш и return Никак не се хаби флаша, защото пак ти казвам че в 99% процента от случаите няма излишни инстукции. Единствено ако имаш функция дето няма нужда от скратч регистри, но пък вика няколко под-процедури. В тоя случай ще имаш един PUSH (2-байта инструкция) в началото само заради адреса. Това е много рядък случай, тъй като компилаторите рядко успяват да се вместят само в 4 регистъра. Но дори и в този случай, значи забележи че PUSH-а е един, т.е. имаш само 1 стек операция, а след това многократно викаш под-процедури и не е нужно при тяхното викане наново да си спасяваш адреса за връщане. Така че дори и PUSH-a да ти е овърхед, пак е за предпочитане пред това да товариш стека и да вдигаш и косумация и да се бавиш. Няма проблеми, седни попиши и ще се убедиш  Въпреки че не те съветвам да асемблираш, безсмислено е... освен ако не си решил да правиш ОС или някакви супер бързи библеотеки... Иначе идея си нямам колко PUSH/POP имам... По принцип в библеотечните ми функции дето съм писал на асемблер почти не използвам стек. Едно време на АРМ7 всъщност не ползвах изобщо юзерски стекове и може да се пишат нишки с 0 (НУЛА) байта стек и те да викат ОС функции. Сека при куртексите не мога да го постигна, щото са преебали сървисите, но общо взето стек мнооого рядко ползвам. Примерно библеотечки за стрингове, дин. памет и т.н. нито спасявам регистри, нито адреси за връщане... всичко е на регистри  Ех priintf/scanf и тем подобни няма как да стане така, но съм се постарал доколкото мога...
|
| Сря Юни 25, 2014 9:47 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Tour of ARM Assembly
Miro, ценя мненията ти (не че това е важно де). Повечето неща, които пишеш, са твърде нависоко за мене и все пак... колко пуш/попа имаш? Не те карам да ги броиш, за мен това е странна особеност и не вярвам да е довела до съществени икономии в кристала. Моят си начин на писане предполага викане на 5-6-10 процедури една в друга, това означава ли толкова пуш/попове? Пак да повторя- не смятам да асемблирам, просто си позволих да задам въпрос в раздел Академия.
|
| Сря Юни 25, 2014 10:18 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Tour of ARM Assembly
Palavrov , само като им гледам картата на паметта и се изприщвам от големите числа . После ти чета горното изречение и освен да ти вярвам сляпо- друго разумно поведение не намирам  . Рамът поевтиня , чиповете поевтиняха, толкоз ли не могат да сместят един класически CALL/RET в поредната тъмб-версия? Ако имаш време и мерак - опиши как АРМ бие 86 , наистина съм сляп за това. Навремето Интел бяха лидер и монопол, не публикуваха детайли за 486 и 586 и спрях да се интересувам от 32 битовите версии. Все пак в главата ми остава усещането че 8086 е по-добре за компилиране на прместваем код, отколкото thumb-армовете. Не че това е предимство,де. Просто съм си го отбелязал, може и да е грешно.
|
| Сря Юни 25, 2014 10:33 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Tour of ARM Assembly
ми... виж сам колко са  Аз ли не обяснявам добре, не змам, ама не става въпрос за никаква икономия в инструкшън сета... Дай пример на асемблер на някаква архитектура, само да не е ПИК че не го чувам... аз ще ти го портна за АРМ и ще броим байтове/инструкции/операции със стека ако искаш, за да се убедиш че няма неефективност или друг проблем, даже напротив!
|
| Сря Юни 25, 2014 10:34 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Tour of ARM Assembly
това са градски легенди... В случая не може да се сравняват така архитектурите поради огромните разлики във времето... АРМ са поне 10 години по-късно като дизайн, така че да сравняваме нещо дето е правено оня ден с нещо дето е правено по времето когато 640К стигаха на всеки и за всичко е досто некоректно. Тук няколко човека вече ръсят подобни голи твърдения... Не, няма проблем с оут ъф ордера освен ако нямаш предвид М0  При v8 ядрата могат да се конфигурират между 3 и 8-issue. Дълбочината на хауса е 128 инструкции, блокажите са минимални. И естествено всичко това е в стила на АРМ, т.е. пестеливо направено... но то и пазара това търси, наскоро си говорихме за ония шемети дето щели да сложат 48 кура в един чеп. Иначе специално за това съм гледал тестове на 64-битовата ябълка, те ползват 6-issue конфигурация.... както и да го гледаш постигат 6 инструкции/клок.
|
| Сря Юни 25, 2014 10:48 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|