Микроконтролери и електроника
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

stefan63 написа:
На АРМ не мога да схвана защо няма комплект CALL/RET с автоматично запазване/възстановяване на адреса за
връщане. Толкова много транзистори и ток ли спестява? Или на мене нещо ми убягва?


Не ти убягва. Това е една от многото тъпотии в архитектурата

Автор:  DanielDimov [ Сря Юни 25, 2014 4:11 pm ]
Заглавие:  Re: Tour of ARM Assembly

не забравяйте че тази архитектура е мислена не да му е удобно на програмиста на асемблер, а да е проста и с малко инструкции (и съответно малко транзистори и малка консумация) да вади голяма изчислителна мощност

Автор:  miro_atc [ Сря Юни 25, 2014 4:33 pm ]
Заглавие:  Re: Tour of ARM Assembly

stefan63 написа:
На АРМ не мога да схвана защо няма комплект CALL/RET с автоматично запазване/възстановяване на адреса за
връщане. Толкова много транзистори и ток ли спестява? Или на мене нещо ми убягва?


Първо, АРМ са вече 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

DanielDimov написа:
не забравяйте че тази архитектура е мислена не да му е удобно на програмиста на асемблер, а да е проста и с малко инструкции (и съответно малко транзистори и малка консумация) да вади голяма изчислителна мощност

Гледай сега, ама хич не си прав :)
- архитектурата е мислена от програмист, пък бил той и гей ... и е изключително удобна за асемблер и не чак толкова за компилатори - отвсякъде бие х86, но спрямо 68к и дедо му PDP11 и липсва малко елегантност (Power, Sparc, MIPS - не ги познавам достатъчно, че да си позволя сравняване)
- простотата е защото са я мислили като духовен наследник на 6502 съответно няма микрокодове и т.н. алабализми, и точно заради това е сравнително стабилна през годините
- малкото транзистори не са били цел ами страничен ефект от дизайна на хартия
- малката консумация въобще не е била цел по време на първоначалния дизайн (80-те) - слествие е от елегантния инструкшън сет и малкия брой транзистори
- арм не вади много голяма изчислителна мощ на такт - но е повече от приличен на ват ;)

Разгледай малко дизасемблиран оптмизиран до дупка Ц код на арм и х86 и ще разбереш какво имам в предвид ...

Автор:  palavrov [ Сря Юни 25, 2014 9:19 pm ]
Заглавие:  Re: Tour of ARM Assembly

stefan63 написа:
На АРМ не мога да схвана защо няма комплект CALL/RET с автоматично запазване/възстановяване на адреса за
връщане. Толкова много транзистори и ток ли спестява? Или на мене нещо ми убягва?

Това всъщност е едно от хитрите неща в архитектурата - позволява малки подпрограмки да не правят запис в стека.
И на мен като идващ от х86 в началото ми беше странно, но с времето осъзнах всъщност колко е тарикатско.
Друга причина е, че така се унифицира инструкшън сет-а ... е сложили са една кръпка BL която заменя 2 инструкции с 1, че иначе народа щеше да пищи още повече ;)

Автор:  palavrov [ Сря Юни 25, 2014 9:23 pm ]
Заглавие:  Re: Tour of ARM Assembly

stefan63 написа:
Зачитах М куртексите, не знам коя v?x e . Демек за всяка вложена процедура трябва да правиш push и pop. Нямам представа как това хаби флаша в едно по-сериозно приложение , просто запазването на PC+ в стека като не става автоматично - много ли икономии са направили? И как това се отразява на флаша при по-сериозно приложение. Например w T-mos за АРМ - колко такива push/pop има? Други въпроси нямам :-)

Thumb е друга бира ... скопен инструкшън сет за да се навре в 16 бита - т.е. кода става по малък с около 30% като байтове, но и с 30% повече като брой инструкции/тактове. Спорно е дали освен спестените центове от по малкия флаш има някаква дуга съществена полза.

Автор:  woody [ Сря Юни 25, 2014 9:38 pm ]
Заглавие:  Re: Tour of ARM Assembly

palavrov написа:
... и е изключително удобна за асемблер и не чак толкова за компилатори

И голяма пръчка за реализиране на superscalar / out-of-order. :)
По този критерий Power > MIPS >> ARM.

Автор:  miro_atc [ Сря Юни 25, 2014 9:47 pm ]
Заглавие:  Re: Tour of ARM Assembly

stefan63 написа:
Зачитах М куртексите, не знам коя v?x e .

7-а
но пак зависи, щото М0 са с доста постен инструкшън сет...

Цитат:
Демек за всяка вложена процедура трябва да правиш push и pop.

Напротив, не трябва. Нали това е идеята адреса за връщане да не се пъха задължително в стека, а се ползва регистър.
Имаш няколко вариата:
1. Leaf процедура, демек не такава дето не вика под-процедури. В тоя случай адреса за връщане си стои в регистъра и няма нужда да го претакваш през стека изобщо.
2. Процедура, която вика само една процедура непосредствено преди да излезе. В тоя случай просто jump-ваш и адреса за връщане не се променя
3. Процедура която вика повече от една или една, ама не на накрая. В тоя случай само ти трябва PUSH, но PUSH-а може да пушне много регистри наведъж и обикновено тоя push така или иначе ти трябва в началото на процедурата. Така че трудно може да говорим за някакъв овърхед. За POP пък още по-малко, защото той се съчетава с return.
Примерно изглежда така:

Код:
push   {r4-r7, lr}
// тяло на процедурата
pop   {r4-r7, pc}

В случая се спасяват няколко регистура и адреса за връщане. При излизане се възстановяват регистрите, но вместо да се възстанови линк регистъра директно се pop-ва програмния брояч, т.е. имаш и return



Цитат:
Нямам представа как това хаби флаша в едно по-сериозно приложение , просто запазването на PC+ в стека като не става автоматично - много ли икономии са направили?

Никак не се хаби флаша, защото пак ти казвам че в 99% процента от случаите няма излишни инстукции. Единствено ако имаш функция дето няма нужда от скратч регистри, но пък вика няколко под-процедури. В тоя случай ще имаш един PUSH (2-байта инструкция) в началото само заради адреса. Това е много рядък случай, тъй като компилаторите рядко успяват да се вместят само в 4 регистъра.
Но дори и в този случай, значи забележи че PUSH-а е един, т.е. имаш само 1 стек операция, а след това многократно викаш под-процедури и не е нужно при тяхното викане наново да си спасяваш адреса за връщане. Така че дори и PUSH-a да ти е овърхед, пак е за предпочитане пред това да товариш стека и да вдигаш и косумация и да се бавиш.


Цитат:
И как това се отразява на флаша при по-сериозно приложение. Например w T-mos за АРМ - колко такива push/pop има? Други въпроси нямам :-)

Няма проблеми, седни попиши и ще се убедиш ;-)
Въпреки че не те съветвам да асемблираш, безсмислено е... освен ако не си решил да правиш ОС или някакви супер бързи библеотеки...
Иначе идея си нямам колко 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 , само като им гледам картата на паметта и се изприщвам от големите числа . После ти чета горното изречение и освен да ти вярвам сляпо- друго разумно поведение не намирам :-) . Рамът поевтиня , чиповете поевтиняха, толкоз ли не могат да сместят един класически CALL/RET в поредната тъмб-версия? Ако имаш време и мерак - опиши как АРМ бие 86 , наистина съм сляп за това. Навремето Интел бяха лидер и монопол, не публикуваха детайли за 486 и 586 и спрях да се интересувам от 32 битовите версии. Все пак в главата ми остава усещането че 8086 е по-добре за компилиране на прместваем код, отколкото thumb-армовете. Не че това е предимство,де. Просто съм си го отбелязал, може и да е грешно.

Автор:  miro_atc [ Сря Юни 25, 2014 10:34 pm ]
Заглавие:  Re: Tour of ARM Assembly

stefan63 написа:
и все пак... колко пуш/попа имаш?


ми... виж сам колко са ;-)


Цитат:
Моят си начин на писане предполага викане на 5-6-10 процедури една в друга, това означава ли толкова пуш/попове?


Аз ли не обяснявам добре, не змам, ама не става въпрос за никаква икономия в инструкшън сета...

Дай пример на асемблер на някаква архитектура, само да не е ПИК че не го чувам... аз ще ти го портна за АРМ и ще броим байтове/инструкции/операции със стека ако искаш, за да се убедиш че няма неефективност или друг проблем, даже напротив!

Автор:  miro_atc [ Сря Юни 25, 2014 10:48 pm ]
Заглавие:  Re: Tour of ARM Assembly

woody написа:
palavrov написа:
... и е изключително удобна за асемблер и не чак толкова за компилатори

И голяма пръчка за реализиране на superscalar / out-of-order. :)
По този критерий Power > MIPS >> ARM.


това са градски легенди...
В случая не може да се сравняват така архитектурите поради огромните разлики във времето... АРМ са поне 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/