Отговори на тема  [ 26 мнения ]  Отиди на страница 1, 2  Следваща
Tour of ARM Assembly 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Tour of ARM Assembly
http://www.coranac.com/tonc/text/asm.htm

_________________
Мразя да мразя ...


Нед Юни 22, 2014 10:20 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 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
stefan63 написа:
На АРМ не мога да схвана защо няма комплект CALL/RET с автоматично запазване/възстановяване на адреса за
връщане. Толкова много транзистори и ток ли спестява? Или на мене нещо ми убягва?


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

_________________
'просто' е технически синоним на 'красиво'


Сря Юни 25, 2014 3:34 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Фев 16, 2014 3:36 pm
Мнения: 953
Мнение Re: Tour of ARM Assembly
не забравяйте че тази архитектура е мислена не да му е удобно на програмиста на асемблер, а да е проста и с малко инструкции (и съответно малко транзистори и малка консумация) да вади голяма изчислителна мощност


Сря Юни 25, 2014 4:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11265
Местоположение: Добрич
Мнение Re: Tour of ARM Assembly
stefan63 написа:
На АРМ не мога да схвана защо няма комплект CALL/RET с автоматично запазване/възстановяване на адреса за
връщане. Толкова много транзистори и ток ли спестява? Или на мене нещо ми убягва?


Първо, АРМ са вече 8 (осем) различни архитектури, не е зле да се уточнява за коя говорим... Да предположим че става дума за v7..

Второ, не е ясно кой адрес искаш да се спасява. Да предположим, че става дума за адреса за връщане на викащата, а не виканата процедура (втория се запазва в LR при BL/BLX инструкциите).

Трето, ако трябва да се спасява нещо, то това е регистър, а не "адрес".

Четвърто, при условие че се ползва концепция за универсални регистри, не виждам по каква логика трябва да има специални инструкции за един конкретен такъв. Кой е казал, че само LR трябва да се спасява?

Пето, какво ще се спасява не се определя от викащия, а от викания. Демек няма как викащия и неговата инструкция за викане да се занимава със спасявания.

Шесто, инструкцията за връщане се изпълнява в контекста на викания и естествено там се знае какво ще възстановява и естествено има такава инструкция ( POP {rx... , pc} )

В крайна сметка, стандартно при ARM пролога на една функция е една опционална PUSH 16-бит инструкция, в която се спасяват нужните регистри. А епилог по принцип няма нужда, тъй като с една 16-бит инструкция се възстановят регистрите и се връща управлението. Ако това не ви се струва оптимално, значи търсете си по-добра архитектура ;-)


Сря Юни 25, 2014 4:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: Tour of ARM Assembly
DanielDimov написа:
не забравяйте че тази архитектура е мислена не да му е удобно на програмиста на асемблер, а да е проста и с малко инструкции (и съответно малко транзистори и малка консумация) да вади голяма изчислителна мощност

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

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

_________________
Мразя да мразя ...


Сря Юни 25, 2014 9:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: Tour of ARM Assembly
stefan63 написа:
На АРМ не мога да схвана защо няма комплект CALL/RET с автоматично запазване/възстановяване на адреса за
връщане. Толкова много транзистори и ток ли спестява? Или на мене нещо ми убягва?

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

_________________
Мразя да мразя ...


Сря Юни 25, 2014 9:19 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: Tour of ARM Assembly
stefan63 написа:
Зачитах М куртексите, не знам коя v?x e . Демек за всяка вложена процедура трябва да правиш push и pop. Нямам представа как това хаби флаша в едно по-сериозно приложение , просто запазването на PC+ в стека като не става автоматично - много ли икономии са направили? И как това се отразява на флаша при по-сериозно приложение. Например w T-mos за АРМ - колко такива push/pop има? Други въпроси нямам :-)

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

_________________
Мразя да мразя ...


Сря Юни 25, 2014 9:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: Tour of ARM Assembly
palavrov написа:
... и е изключително удобна за асемблер и не чак толкова за компилатори

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


Сря Юни 25, 2014 9:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11265
Местоположение: Добрич
Мнение 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 и тем подобни няма как да стане така, но съм се постарал доколкото мога...


Сря Юни 25, 2014 9:47 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: Tour of ARM Assembly
Miro, ценя мненията ти (не че това е важно де). Повечето неща, които пишеш, са твърде нависоко за мене и все пак... колко пуш/попа имаш? Не те карам да ги броиш, за мен това е странна особеност и не вярвам да е довела до съществени икономии в кристала.
Моят си начин на писане предполага викане на 5-6-10 процедури една в друга, това означава ли толкова пуш/попове?
Пак да повторя- не смятам да асемблирам, просто си позволих да задам въпрос в раздел Академия.


Сря Юни 25, 2014 10:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11265
Местоположение: Добрич
Мнение Re: Tour of ARM Assembly
stefan63 написа:
и все пак... колко пуш/попа имаш?


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


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


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

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


Сря Юни 25, 2014 10:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11265
Местоположение: Добрич
Мнение 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 инструкции/клок.


Сря Юни 25, 2014 10:48 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 26 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни