| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Tour of ARM Assembly http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=13017 |
Страница 1 от 2 |
| Автор: | palavrov [ Нед Юни 22, 2014 10:20 am ] |
| Заглавие: | Tour of ARM Assembly |
http://www.coranac.com/tonc/text/asm.htm |
|
| Автор: | stefan63 [ Сря Юни 25, 2014 3:30 pm ] |
| Заглавие: | Re: Tour of ARM Assembly |
На АРМ не мога да схвана защо няма комплект CALL/RET с автоматично запазване/възстановяване на адреса за връщане. Толкова много транзистори и ток ли спестява? Или на мене нещо ми убягва? |
|
| Автор: | Н'бабане Гт'муан'га [ Сря Юни 25, 2014 3:34 pm ] | |||||||||
| Заглавие: | Re: Tour of ARM Assembly | |||||||||
Не ти убягва. Това е една от многото тъпотии в архитектурата |
||||||||||
| Автор: | DanielDimov [ Сря Юни 25, 2014 4:11 pm ] |
| Заглавие: | Re: Tour of ARM Assembly |
не забравяйте че тази архитектура е мислена не да му е удобно на програмиста на асемблер, а да е проста и с малко инструкции (и съответно малко транзистори и малка консумация) да вади голяма изчислителна мощност |
|
| Автор: | miro_atc [ Сря Юни 25, 2014 4:33 pm ] | |||||||||
| Заглавие: | Re: Tour of ARM Assembly | |||||||||
Първо, АРМ са вече 8 (осем) различни архитектури, не е зле да се уточнява за коя говорим... Да предположим че става дума за v7.. Второ, не е ясно кой адрес искаш да се спасява. Да предположим, че става дума за адреса за връщане на викащата, а не виканата процедура (втория се запазва в LR при BL/BLX инструкциите). Трето, ако трябва да се спасява нещо, то това е регистър, а не "адрес". Четвърто, при условие че се ползва концепция за универсални регистри, не виждам по каква логика трябва да има специални инструкции за един конкретен такъв. Кой е казал, че само LR трябва да се спасява? Пето, какво ще се спасява не се определя от викащия, а от викания. Демек няма как викащия и неговата инструкция за викане да се занимава със спасявания. Шесто, инструкцията за връщане се изпълнява в контекста на викания и естествено там се знае какво ще възстановява и естествено има такава инструкция ( POP {rx... , pc} ) В крайна сметка, стандартно при ARM пролога на една функция е една опционална PUSH 16-бит инструкция, в която се спасяват нужните регистри. А епилог по принцип няма нужда, тъй като с една 16-бит инструкция се възстановят регистрите и се връща управлението. Ако това не ви се струва оптимално, значи търсете си по-добра архитектура |
||||||||||
| Автор: | stefan63 [ Сря Юни 25, 2014 8:11 pm ] |
| Заглавие: | Re: Tour of ARM Assembly |
Зачитах М куртексите, не знам коя v?x e . Демек за всяка вложена процедура трябва да правиш push и pop. Нямам представа как това хаби флаша в едно по-сериозно приложение , просто запазването на PC+ в стека като не става автоматично - много ли икономии са направили? И как това се отразява на флаша при по-сериозно приложение. Например w T-mos за АРМ - колко такива push/pop има? Други въпроси нямам |
|
| Автор: | palavrov [ Сря Юни 25, 2014 9:16 pm ] | |||||||||
| Заглавие: | Re: Tour of ARM Assembly | |||||||||
Гледай сега, ама хич не си прав - архитектурата е мислена от програмист, пък бил той и гей ... и е изключително удобна за асемблер и не чак толкова за компилатори - отвсякъде бие х86, но спрямо 68к и дедо му PDP11 и липсва малко елегантност (Power, Sparc, MIPS - не ги познавам достатъчно, че да си позволя сравняване) - простотата е защото са я мислили като духовен наследник на 6502 съответно няма микрокодове и т.н. алабализми, и точно заради това е сравнително стабилна през годините - малкото транзистори не са били цел ами страничен ефект от дизайна на хартия - малката консумация въобще не е била цел по време на първоначалния дизайн (80-те) - слествие е от елегантния инструкшън сет и малкия брой транзистори - арм не вади много голяма изчислителна мощ на такт - но е повече от приличен на ват Разгледай малко дизасемблиран оптмизиран до дупка Ц код на арм и х86 и ще разбереш какво имам в предвид ... |
||||||||||
| Автор: | palavrov [ Сря Юни 25, 2014 9:19 pm ] | |||||||||
| Заглавие: | Re: Tour of ARM Assembly | |||||||||
Това всъщност е едно от хитрите неща в архитектурата - позволява малки подпрограмки да не правят запис в стека. И на мен като идващ от х86 в началото ми беше странно, но с времето осъзнах всъщност колко е тарикатско. Друга причина е, че така се унифицира инструкшън сет-а ... е сложили са една кръпка BL която заменя 2 инструкции с 1, че иначе народа щеше да пищи още повече |
||||||||||
| Автор: | palavrov [ Сря Юни 25, 2014 9:23 pm ] | |||||||||
| Заглавие: | Re: Tour of ARM Assembly | |||||||||
Thumb е друга бира ... скопен инструкшън сет за да се навре в 16 бита - т.е. кода става по малък с около 30% като байтове, но и с 30% повече като брой инструкции/тактове. Спорно е дали освен спестените центове от по малкия флаш има някаква дуга съществена полза. |
||||||||||
| Автор: | woody [ Сря Юни 25, 2014 9:38 pm ] | |||||||||
| Заглавие: | Re: Tour of ARM Assembly | |||||||||
И голяма пръчка за реализиране на superscalar / out-of-order. По този критерий Power > MIPS >> ARM. |
||||||||||
| Автор: | miro_atc [ Сря Юни 25, 2014 9:47 pm ] | |||||||||||||||||||||||||||||||||||||||||||||
| Заглавие: | 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 и тем подобни няма как да стане така, но съм се постарал доколкото мога... |
||||||||||||||||||||||||||||||||||||||||||||||
| Автор: | stefan63 [ Сря Юни 25, 2014 10:18 pm ] |
| Заглавие: | Re: Tour of ARM Assembly |
Miro, ценя мненията ти (не че това е важно де). Повечето неща, които пишеш, са твърде нависоко за мене и все пак... колко пуш/попа имаш? Не те карам да ги броиш, за мен това е странна особеност и не вярвам да е довела до съществени икономии в кристала. Моят си начин на писане предполага викане на 5-6-10 процедури една в друга, това означава ли толкова пуш/попове? Пак да повторя- не смятам да асемблирам, просто си позволих да задам въпрос в раздел Академия. |
|
| Автор: | stefan63 [ Сря Юни 25, 2014 10:33 pm ] | |||||||||
| Заглавие: | Re: Tour of ARM Assembly | |||||||||
Palavrov , само като им гледам картата на паметта и се изприщвам от големите числа . После ти чета горното изречение и освен да ти вярвам сляпо- друго разумно поведение не намирам |
||||||||||
| Автор: | miro_atc [ Сря Юни 25, 2014 10:34 pm ] | ||||||||||||||||||
| Заглавие: | Re: Tour of ARM Assembly | ||||||||||||||||||
ми... виж сам колко са
Аз ли не обяснявам добре, не змам, ама не става въпрос за никаква икономия в инструкшън сета... Дай пример на асемблер на някаква архитектура, само да не е ПИК че не го чувам... аз ще ти го портна за АРМ и ще броим байтове/инструкции/операции със стека ако искаш, за да се убедиш че няма неефективност или друг проблем, даже напротив! |
|||||||||||||||||||
| Автор: | miro_atc [ Сря Юни 25, 2014 10:48 pm ] | ||||||||||||||||||
| Заглавие: | Re: Tour of ARM Assembly | ||||||||||||||||||
това са градски легенди... В случая не може да се сравняват така архитектурите поради огромните разлики във времето... АРМ са поне 10 години по-късно като дизайн, така че да сравняваме нещо дето е правено оня ден с нещо дето е правено по времето когато 640К стигаха на всеки и за всичко е досто некоректно. Тук няколко човека вече ръсят подобни голи твърдения... Не, няма проблем с оут ъф ордера освен ако нямаш предвид М0 При v8 ядрата могат да се конфигурират между 3 и 8-issue. Дълбочината на хауса е 128 инструкции, блокажите са минимални. И естествено всичко това е в стила на АРМ, т.е. пестеливо направено... но то и пазара това търси, наскоро си говорихме за ония шемети дето щели да сложат 48 кура в един чеп. Иначе специално за това съм гледал тестове на 64-битовата ябълка, те ползват 6-issue конфигурация.... както и да го гледаш постигат 6 инструкции/клок. |
|||||||||||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|