Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056

ASSEMBLER в современном программировании нужен/нет?

24.02.2013, 23:56. Показов 7465. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если раньше использовали ассемблер в основном для оптимизации кода, то при трассировки современным компилятором необходимость в этом отсутствует (во всяком случаи так оповещается в некоторых источниках). У меня возник вопрос: где сегодня может быть полезны знания ассемблера как такового и в каких сферах он применятся (если вообще применятся). Ну и вообще, знать его нужно или нет. Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.02.2013, 23:56
Ответы с готовыми решениями:

Реализация хранения данных из БД в современном WEB-программировании
Есть на сервере некий php файл, который спокойно себе забирает данные из MySQL DB на этом же сервере и выдает их в JSON. Вид JSONа, если...

Зачем в современном мире нужен HeapAlloc ?
Эти методы для кучи случаем не деприкэйтед? Зачем некоторые товарищи до сих пор выделяют память посредствам HeapAlloc(GetProcessHeap(),...

Нужен совет новичку в программировании
Всем привет. Я уже примерно 7 месяцев собираюсь прочитать книгу по C++, но всё время находятся дела _поважнее_. Причина этому следующая:...

40
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
26.02.2013, 20:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Jupiter Посмотреть сообщение
вот насмешил, микроконтроллеры сейчас на Си как минимум программят
Я думал только на ассемблере, а на С++ можно микроконтроллеры писать?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.02.2013, 20:55
Цитата Сообщение от snyppimylt Посмотреть сообщение
а на С++ можно микроконтроллеры писать?
с ограничениями, но можно
0
Not Found
 Аватар для Febian
396 / 135 / 5
Регистрация: 29.09.2012
Сообщений: 1,367
Записей в блоге: 1
26.02.2013, 20:57
Цитата Сообщение от snyppimylt Посмотреть сообщение
а на С++ можно микроконтроллеры писать?
Нет. Но с помощью C++ можно программировать микроконтроллер.
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
26.02.2013, 21:40
Цитата Сообщение от Febian Посмотреть сообщение
Нет. Но с помощью C++ можно программировать микроконтроллер.
С такими выводами мне кажется что С функциональнее чем С++ , какой смысл я тогда С++ учу?

Добавлено через 1 минуту
Извините, вопрос поставил некорректно
"А на С++ можно программировать микроконтроллеры"

Только сейчас заметил.
0
Not Found
 Аватар для Febian
396 / 135 / 5
Регистрация: 29.09.2012
Сообщений: 1,367
Записей в блоге: 1
26.02.2013, 21:44
Цитата Сообщение от snyppimylt Посмотреть сообщение
С такими выводами мне кажется что С функциональнее чем С++
Не совсем так. Просто плюсы предназначены для других целей.
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
26.02.2013, 21:46
Цитата Сообщение от Febian Посмотреть сообщение
Не совсем так. Просто плюсы предназначены для других целей.
Извольте объяснить если не трудно, в чем тогда разница между ними?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,544
Записей в блоге: 1
26.02.2013, 21:51
Цитата Сообщение от snyppimylt Посмотреть сообщение
С такими выводами мне кажется что С функциональнее чем С++ , какой смысл я тогда С++ учу?
Действительно, если хочешь программировать микроконтроллеры, зачем ты учишь плюсы? Если всё-таки пишешь программы для компьютера(ПК), зачем жалеть о том, что тебе не нужно?

Добавлено через 1 минуту
Цитата Сообщение от snyppimylt Посмотреть сообщение
Извольте объяснить если не трудно, в чем тогда разница между ними?
Между чем? Целями? Ну, цели у Сей чуть более низкоуровневые. А вообще к чему этот спор??? Всё что написано на С++ может быть написано на С.

По-моему, при обсуждении языка программирования спрашивать "а на нём можно программировать то-то?" довольно нелепо. В большинстве случаев одну и ту же задачу можно решить на куче различных языков программирования. И если уж обсуждать различия, то точно не в функциях, поддерживаемых языком.
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
26.02.2013, 22:00
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Действительно, если хочешь программировать микроконтроллеры, зачем ты учишь плюсы? Если всё-таки пишешь программы для компьютера(ПК), зачем жалеть о том, что тебе не нужно?
Вопрос возник из за возможностей языка, что мол функциональнее а что нет. Микроконтроллеры программировать не собирался. Хотя знаете, эта тема тоже интересная, но за все разом не возьмешься, иначе фигня получается.

Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
По-моему, при обсуждении языка программирования спрашивать "а на нём можно программировать то-то" довольно нелепо.
Вам виднее, но спасибо за информацию.

Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
если уж обсуждать различия, то точно не в функциях, поддерживаемых языком.
а в чем обсуждать различия если не в функциях?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,544
Записей в блоге: 1
26.02.2013, 22:20
Цитата Сообщение от snyppimylt Посмотреть сообщение
а в чем обсуждать различия если не в функциях?
в парадигмах, в синтаксисе, в функционале.
короче...
Если спросить, "на каком языке можно написать оконное приложение, а то надоело с консольным Hello World играть",
один тебе посоветует Си и WinAPI
2й Ассемблер и WinAPI
3й Delphi и WinAPI
7й С++ и Qt
4й C++ и MFC
5й Python и Qt
6й C#, Java, и ещё куча языков...
Аналогичные ответы на вопросы "на каком языке писать 3d графику, звук...и.т.п.?".
К тому же, все эти языки могут расширяться сторонними библиотеками.

Короче, решить задачу можно хоть на ассемблере. Спрашивать, а умеет ли язык ... можно только если до этого тебя пытали в школе QBasic-ом, и у тебя развилась фобия, что языки программирования много чего не могут.
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
26.02.2013, 22:35
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
в парадигмах, в синтаксисе, в функционале.
короче...
Если спросить, "на каком языке можно написать оконное приложение, а то надоело с консольным Hello World играть",
один тебе посоветует Си и WinAPI
2й Ассемблер и WinAPI
3й Delphi и WinAPI
7й С++ и Qt
4й C++ и MFC
5й Python и Qt
6й C#, Java, и ещё куча языков...
Аналогичные ответы на вопросы "на каком языке писать 3d графику, звук...и.т.п.?".
К тому же, все эти языки могут расширяться сторонними библиотеками.

Короче, решить задачу можно хоть на ассемблере. Спрашивать, а умеет ли язык ... можно только если до этого тебя пытали в школе QBasic-ом, и у тебя развилась фобия, что языки программирования много чего не могут.
Вот оно как... Первым что я учил это VB6 а потом перешел на С++, но знайте, не пожалел, очень интересно и много всего.

Спасибо за пояснение.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.03.2013, 07:16
Цитата Сообщение от Jupiter Посмотреть сообщение
вот насмешил, микроконтроллеры сейчас на Си как минимум программят
при наличии кроскомпилятора. А сам кроскомпилятор можно написать без знания ассемблера и опкодов? Причём, так как язык c продолжает развиваться, да и разработка контроллеров врядли прекращена, то вскоре может понадобаиться новый кроскомпилятор. Да и не всегда он юзается для контроллеров. Мой научный руководитель был начальником на зоводе и там его подчинённые прогили и контроллеры в том числе. Не на сях точно. Чаще всего скада, но тоже не всегда. Асасемблер ещё долго будет иметь эпизодическое применение даже для программирования локальных программ для настольных машин, не говоря про контроллеры.
0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
15.03.2013, 12:12
Цитата Сообщение от Jupiter Посмотреть сообщение
вот насмешил, микроконтроллеры сейчас на Си как минимум программят
Я знаю одного болезненного, который пишет прошивки на паскале. По сути нет разницы, но делфишколокодер не смыслит в указателях.
Цитата Сообщение от taras atavin Посмотреть сообщение
А сам кроскомпилятор можно написать без знания ассемблера и опкодов?
Нет. Но он пишется на сях.

Цитата Сообщение от taras atavin Посмотреть сообщение
может понадобаиться новый кроскомпилятор
может нужно будет дописывать компилятор?

Цитата Сообщение от taras atavin Посмотреть сообщение
Мой научный руководитель был начальником на зоводе и там его подчинённые прогили и контроллеры в том числе. Не на сях точно. Чаще всего скада, но тоже не всегда. Асасемблер ещё долго будет иметь эпизодическое применение даже для программирования локальных программ для настольных машин, не говоря про контроллеры.
Ваш научный руководитель ничего не смыслит в программировании вообще. У меня программа на диплом подключалась к USB. Все конструкции нормально пишутся на си, скорость вполне подходит. В локальных программах точно практически не используется ассемблер. Некоторые вообще на дотнетах и жабах свои программы пишут.

Добавлено через 10 минут
Вот нашел небольшой FAQ от Луговского 14 летней давности. Мысли хорошие, но тест содержит мат, как и все известные тексты луговского. Только в последнем пункте накосячил, т.к. машкоды и команды ассемблера имеют прямую связь.
где жирный шрифт там был мат
- На ассемблере можно писать эффективные программы, потому что нет лишних инструкций, быстро!
- Ага, а для современных процов надоедает руками оптимизировать, учитывать все конвееры и распараллеливание, и главное, нафига, когда компилятор лучше это делает?
- На нем можно писать маленькие программы туда, куда надо, например, BIOS написать!
- BIOS сейчас не 8 килобайт, так что пишется на Си и Форте.
- Ну все равно, низкоуровневое программирование надо на ассемблере делать - вот ядра ОС, драйвера /щас вы начнете мямлить, и я как скажу, что видел исходники Крутого Драйвера для DOS на ассемеблере, всех посрамлю!/
- Родной, ты в каком мире живешь? Это все пишется на Си, ассемблера там доли процента - загляни в исходники ядра Linux да посчитай количество строк в файлах *.s сравнительно с общим размером.
- Ничего вы не понимаете! Каждый программист должен знать ассемблер, хоть даже не применяет, иначе он плохой программист, и вообще, чем ниже уровень языка, тем выше должен быть интеллект программера!
- Шел бы ты математику изучать, кодеришка серый, у тебя ж даже зеленого представления о функциональных языках нет.
- Ну вы же не можете отрицать, что ассемблер все-таки нужен?
- Ну нужен, да только в таких малых количествах, что можно и время не тратить, навряд ли тебе это понадобится.
- Как это в малых? Во, вспомнил - он нужен для написания компиляторов, они же в машиный код (ассемблер значит) компилируют. Так что не отмазывайтесь, что компилятор Си написан на Си, библиотеки еще есть - я ж сам видел, что RTL Турбо Паскаля 7 написана на ассемблере!
- Ты бы еще более убогонький недоязычок в пример привел, а у нормальных языков библиотеки пишутся на них же. Ты что, про кросс-компилирование не слышал? Да и даже для нативного компилирования программисту компилятора не требуется учить ассемблер, а нужен всего лишь справочник по машкодам соответствующего процессора. И что это ты там сказал про компилирование непосредственно в ассемблер? Иди передай своему преподавателю курса теории компиляторов, что у тебя трудности с пониманием процесса.


Добавлено через 4 часа 2 минуты
Вот нашел статью dihalt'а о программировании в МК
c vs assembler
0
Антикодер
Эксперт функциональных языков программирования
1889 / 871 / 48
Регистрация: 15.09.2012
Сообщений: 3,092
15.03.2013, 15:14
полностью согласен с DI Halt -ом - нечего добавить. Просто тупо писать C++, а в узких местах добавляем ассемблер.
то есть сначала смотрим, какой ассемблерный код выдаёт компилятор C++ и если он нас не устраивает правим. Но в моей практике не было таких ситуаций. Обычно если алгоритм работает это уже хорошо.

Я так понимаю этим C++ выгодно отличается от других языков типа C# и Java.

можно опустить вопрос на более низкий уровень, нужно ли уметь проектировать логику микросхем? очевидно этим кто то должен заниматься.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
15.03.2013, 15:52
Цитата Сообщение от XRuZzz Посмотреть сообщение
то есть сначала смотрим, какой ассемблерный код выдаёт компилятор C++ и если он нас не устраивает правим.
Так никто не делает. Если где-то есть узкое место, где нельзя положиться на компилятор, то просто делается ассемблерная вставка.
0
15.03.2013, 16:22

Не по теме:


согласен, но прежде хочется посмотреть, что делает компилятор

0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
15.03.2013, 17:07
Цитата Сообщение от XRuZzz Посмотреть сообщение
можно опустить вопрос на более низкий уровень, нужно ли уметь проектировать логику микросхем? очевидно этим кто то должен заниматься.
Вы о проектировании МК? Если нет, то есть ПЛИС.
Цитата Сообщение от XRuZzz Посмотреть сообщение
полностью согласен с DI Halt -ом - нечего добавить. Просто тупо писать C++, а в узких местах добавляем ассемблер.
Можешь привести пример узкого места в случае с МК? Все же примитивно. Все структуры - указатели, которые ложатся ровно на адрес регистра в памяти, что убирает разницу между скомпилированным ассемблерным и сишным кодом.
Кстати, один раз мне пригодилось знание ассемблера - я понял, что и где виснет и поставил nop в МК LPC1343. Потому мое мнение - не надо писать на ассемблере даже МК, но нужно его знать из-за таких узких мест, но если вы считаете, что установить nop это писать на ассемблере, то я не согласен.
Цитата Сообщение от Kastaneda Посмотреть сообщение
Так никто не делает. Если где-то есть узкое место, где нельзя положиться на компилятор, то просто делается ассемблерная вставка.
Пример в студию.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
15.03.2013, 18:23
Цитата Сообщение от Crast Посмотреть сообщение
Пример в студию.
Странная просьба, ну ладно
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
$cd /usr/src/linux-<kernel version>
$grep -r " asm volatile" .
./arch/alpha/kernel/core_apecs.c:       asm volatile("ldl %0,%1; mb; mb" : "=r"(
value) : "m"(*(vuip)addr)
./arch/alpha/kernel/time.c:    asm volatile ("rpcc %0" : "=r"(result));
./arch/alpha/lib/fpreg.c:#define STT(reg,val)  asm volatile ("ftoit $f"#reg",%0"
 : "=r"(val));
./arch/alpha/lib/fpreg.c:#define STT(reg,val)  asm volatile ("stt $f"#reg",%0" :
 "=m"(val));
./arch/alpha/lib/fpreg.c:#define LDT(reg,val)  asm volatile ("itoft %0,$f"#reg :
 : "r"(val));
./arch/alpha/lib/fpreg.c:#define LDT(reg,val)  asm volatile ("ldt $f"#reg",%0" :
 : "m"(val));
./arch/alpha/lib/fpreg.c:#define STS(reg,val)  asm volatile ("ftois $f"#reg",%0"
 : "=r"(val));
./arch/alpha/lib/fpreg.c:#define STS(reg,val)  asm volatile ("sts $f"#reg",%0" :
 "=m"(val));
./arch/alpha/lib/fpreg.c:#define LDS(reg,val)  asm volatile ("itofs %0,$f"#reg :
 : "r"(val));
./arch/alpha/lib/fpreg.c:#define LDS(reg,val)  asm volatile ("lds $f"#reg",%0" :
 : "m"(val));
./arch/arm/boot/compressed/misc.c:              asm volatile ("mrc p14, 0, %0, c
0, c1, 0" : "=r" (status));
./arch/arm/boot/compressed/misc.c:              asm volatile ("mrc p14, 0, %0, c
14, c0, 0" : "=r" (status));
./arch/arm/boot/compressed/misc.c:              asm volatile ("mrc p14, 0, %0, c
0, c0, 0" : "=r" (status));
./arch/arm/include/asm/bug.h:   asm volatile("1:\t" BUG_INSTR_TYPE #__value "\n"
        \
./arch/arm/include/asm/bug.h:   asm volatile(BUG_INSTR_TYPE #__value);  \
./arch/arm/include/asm/cmpxchg.h:               asm volatile("@ __xchg1\n"
./arch/arm/include/asm/cmpxchg.h:               asm volatile("@ __xchg4\n"
./arch/arm/include/asm/cmpxchg.h:               asm volatile("@ __xchg1\n"
./arch/arm/include/asm/cmpxchg.h:               asm volatile("@ __xchg4\n"
./arch/arm/include/asm/cmpxchg.h:                       asm volatile("@ __cmpxch
g1\n"
./arch/arm/include/asm/cmpxchg.h:                       asm volatile("@ __cmpxch
g1\n"
./arch/arm/include/asm/cmpxchg.h:                       asm volatile("@ __cmpxch
g4\n"
./arch/arm/include/asm/cp15.h:  asm volatile("mcr p15, 0, %0, c1, c0, 0 @ set CR
"
./arch/arm/include/asm/cp15.h:  asm volatile("mcr p15, 0, %0, c1, c0, 2 @ set co
pro access"
./arch/arm/include/asm/domain.h:        asm volatile(
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mrc p6, 0, %0, c0,
 c1, 0" : "=r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mcr p6, 0, %0, c0,
 c1, 0" : : "r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mcr p6, 0, %0, c1,
 c1, 0" : : "r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mrc p6, 0, %0, c2,
 c1, 0" : "=r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mcr p6, 0, %0, c2,
 c1, 0" : : "r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mrc p6, 0, %0, c3,
 c1, 0" : "=r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mcr p6, 0, %0, c3,
 c1, 0" : : "r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mcr p6, 0, %0, c4,
 c1, 0" : : "r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mcr p6, 0, %0, c5,
 c1, 0" : : "r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mcr p6, 0, %0, c6,
 c1, 0" : : "r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mrc p6, 0, %0, c7,
 c1, 0":"=r" (val));
./arch/arm/include/asm/hardware/iop3xx.h:       asm volatile("mcr p6, 0, %0, c7,
 c1, 0"::"r" (val));
./arch/arm/include/asm/hw_breakpoint.h: asm volatile("mrc p14, 0, %0, " #N "," #
M ", " #OP2 : "=r" (VAL));\
./arch/arm/include/asm/hw_breakpoint.h: asm volatile("mcr p14, 0, %0, " #N "," #
M ", " #OP2 : : "r" (VAL));\
./arch/arm/include/asm/io.h:    asm volatile("strh %1, %0"
./arch/arm/include/asm/io.h:    asm volatile("ldrh %1, %0"
./arch/arm/include/asm/io.h:    asm volatile("strb %1, %0"
./arch/arm/include/asm/io.h:    asm volatile("str %1, %0"
./arch/arm/include/asm/io.h:    asm volatile("ldrb %1, %0"
./arch/arm/include/asm/io.h:    asm volatile("ldr %1, %0"
./arch/arm/include/asm/irqflags.h:      asm volatile(
./arch/arm/include/asm/irqflags.h:      asm volatile(
./arch/arm/include/asm/irqflags.h:      asm volatile(
./arch/arm/include/asm/irqflags.h:      asm volatile(
./arch/arm/include/asm/irqflags.h:      asm volatile(
./arch/arm/include/asm/irqflags.h:      asm volatile(
./arch/arm/include/asm/irqflags.h:      asm volatile(
./arch/arm/include/asm/irqflags.h:      asm volatile(
./arch/arm/include/asm/mtd-xip.h:#define xip_iprefetch()        do { asm volatil
e (".rep 8; nop; .endr"); } while (0)
./arch/arm/include/asm/percpu.h:        asm volatile("mcr p15, 0, %0, c13, c0, 4
" : : "r" (off) : "memory");
./arch/arm/kernel/arch_timer.c:                 asm volatile("mcr p15, 0, %0, c1
4, c2, 1" : : "r" (val));
./arch/arm/kernel/arch_timer.c:                 asm volatile("mcr p15, 0, %0, c1
4, c2, 0" : : "r" (val));
./arch/arm/kernel/arch_timer.c:                 asm volatile("mcr p15, 0, %0, c1
4, c3, 1" : : "r" (val));
./arch/arm/kernel/arch_timer.c:                 asm volatile("mcr p15, 0, %0, c1
4, c3, 0" : : "r" (val));
./arch/arm/kernel/arch_timer.c:                 asm volatile("mrc p15, 0, %0, c1
4, c2, 1" : "=r" (val));
./arch/arm/kernel/arch_timer.c:                 asm volatile("mrc p15, 0, %0, c1
4, c2, 0" : "=r" (val));
./arch/arm/kernel/arch_timer.c:                 asm volatile("mrc p15, 0, %0, c1
4, c0, 0" : "=r" (val));
./arch/arm/kernel/arch_timer.c:                 asm volatile("mrc p15, 0, %0, c1
4, c3, 1" : "=r" (val));
./arch/arm/kernel/arch_timer.c:                 asm volatile("mrc p15, 0, %0, c1
4, c3, 0" : "=r" (val));
./arch/arm/kernel/arch_timer.c:         asm volatile("mrrc p15, 0, %Q0, %R0, c14
" : "=r" (cval));
./arch/arm/kernel/arch_timer.c:         asm volatile("mrrc p15, 1, %Q0, %R0, c14
" : "=r" (cval));
./arch/arm/kernel/perf_event_v6.c:      asm volatile("mrc   p15, 0, %0, c15, c12
, 0" : "=r"(val));
./arch/arm/kernel/perf_event_v6.c:      asm volatile("mcr   p15, 0, %0, c15, c12
, 0" : : "r"(val));
./arch/arm/kernel/perf_event_v6.c:              asm volatile("mrc   p15, 0, %0,
c15, c12, 1" : "=r"(value));
./arch/arm/kernel/perf_event_v6.c:              asm volatile("mrc   p15, 0, %0,
c15, c12, 2" : "=r"(value));
./arch/arm/kernel/perf_event_v6.c:              asm volatile("mrc   p15, 0, %0,
c15, c12, 3" : "=r"(value));
./arch/arm/kernel/perf_event_v6.c:              asm volatile("mcr   p15, 0, %0,
c15, c12, 1" : : "r"(value));
./arch/arm/kernel/perf_event_v6.c:              asm volatile("mcr   p15, 0, %0,
c15, c12, 2" : : "r"(value));
./arch/arm/kernel/perf_event_v6.c:              asm volatile("mcr   p15, 0, %0,
c15, c12, 3" : : "r"(value));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mrc p15, 0, %0, c9, c12, 0
" : "=r"(val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mcr p15, 0, %0, c9, c12, 0
" : : "r"(val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mcr p15, 0, %0, c9, c12, 5
" : : "r" (counter));
./arch/arm/kernel/perf_event_v7.c:              asm volatile("mrc p15, 0, %0, c9
, c13, 0" : "=r" (value));
./arch/arm/kernel/perf_event_v7.c:              asm volatile("mrc p15, 0, %0, c9
, c13, 2" : "=r" (value));
./arch/arm/kernel/perf_event_v7.c:              asm volatile("mcr p15, 0, %0, c9
, c13, 0" : : "r" (value));
./arch/arm/kernel/perf_event_v7.c:              asm volatile("mcr p15, 0, %0, c9
, c13, 2" : : "r" (value));
./arch/arm/kernel/perf_event_v7.c:              asm volatile("mcr p15, 0, %0, c9
, c13, 1" : : "r" (val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mcr p15, 0, %0, c9, c12, 1
" : : "r" (BIT(counter)));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mcr p15, 0, %0, c9, c12, 2
" : : "r" (BIT(counter)));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mcr p15, 0, %0, c9, c14, 1
" : : "r" (BIT(counter)));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mcr p15, 0, %0, c9, c14, 2
" : : "r" (BIT(counter)));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mcr p15, 0, %0, c9, c12, 3
" : : "r" (BIT(counter)));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mrc p15, 0, %0, c9, c12, 3
" : "=r" (val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mcr p15, 0, %0, c9, c12, 3
" : : "r" (val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mrc p15, 0, %0, c9, c12, 0
" : "=r" (val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mrc p15, 0, %0, c9, c12, 1
" : "=r" (val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mrc p15, 0, %0, c9, c14, 1
" : "=r" (val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mrc p15, 0, %0, c9, c12, 3
" : "=r" (val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mrc p15, 0, %0, c9, c12, 5
" : "=r" (val));
./arch/arm/kernel/perf_event_v7.c:      asm volatile("mrc p15, 0, %0, c9, c13, 0
" : "=r" (val));
./arch/arm/kernel/perf_event_v7.c:              asm volatile("mrc p15, 0, %0, c9
, c13, 2" : "=r" (val));
./arch/arm/kernel/perf_event_v7.c:              asm volatile("mrc p15, 0, %0, c9
, c13, 1" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mrc p14, 0, %0, c0, c0, 0"
 : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mcr p14, 0, %0, c0, c0, 0"
 : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mrc p14, 0, %0, c1
, c0, 0" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mrc p14, 0, %0, c2
, c0, 0" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mrc p14, 0, %0, c3
, c0, 0" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mcr p14, 0, %0, c1
, c0, 0" : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mcr p14, 0, %0, c2
, c0, 0" : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mcr p14, 0, %0, c3
, c0, 0" : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mrc p14, 0, %0, c0, c1, 0"
 : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mcr p14, 0, %0, c0, c1, 0"
 : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mrc p14, 0, %0, c5, c1, 0"
 : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mcr p14, 0, %0, c5, c1, 0"
 : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mrc p14, 0, %0, c8, c1, 0"
 : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mcr p14, 0, %0, c8, c1, 0"
 : : "r"(val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mrc p14, 0, %0, c4, c1, 0"
 : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:  asm volatile("mcr p14, 0, %0, c4, c1, 0"
 : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mrc p14, 0, %0, c1
, c1, 0" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mrc p14, 0, %0, c0
, c2, 0" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mrc p14, 0, %0, c1
, c2, 0" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mrc p14, 0, %0, c2
, c2, 0" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mrc p14, 0, %0, c3
, c2, 0" : "=r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mcr p14, 0, %0, c1
, c1, 0" : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mcr p14, 0, %0, c0
, c2, 0" : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mcr p14, 0, %0, c1
, c2, 0" : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mcr p14, 0, %0, c2
, c2, 0" : : "r" (val));
./arch/arm/kernel/perf_event_xscale.c:          asm volatile("mcr p14, 0, %0, c3
, c2, 0" : : "r" (val));
./arch/arm/mach-at91/pm.h:      asm volatile(
$

это вывод за первую секунду поиска, надеюсь весь показывать не надо
0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
15.03.2013, 19:07
Цитата Сообщение от Kastaneda Посмотреть сообщение
это вывод за первую секунду поиска, надеюсь весь показывать не надо
Вы меня не поняли. Я просил кусок кода и почему там нужна оптимизация. Почему на Си это нельзя написать.
Я же писал, что у меня тоже были программы, в которых тоже нужно было вставить volatile __asm__{"nop nop"}, который нужен для завершения работы конвейера. А вот именно вариантов для оптимизации скорости я не знаю.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
15.03.2013, 20:06
Цитата Сообщение от Crast Посмотреть сообщение
Я просил кусок кода и почему там нужна оптимизация. Почему на Си это нельзя написать.
Если нужна именно оптимизация, то чаще используются intrinsic'и, нежели сам ассемблер, что впрочем можно сказать одно и тоже. А ассемблерные вставки используются для того, что нельзя выразить на С/С++.

Для примера - у нас в конторе пишут один open source проект, в котором задействован алгоритм Смита-Ватермана (кому интересно, может погуглить что это), так вот, когда его переписали через интринсики (SSE2) скорость на некоторых данных возросла в 100 раз! Нехилая такая оптимизация)
0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
15.03.2013, 20:11
Цитата Сообщение от Kastaneda Посмотреть сообщение
Для примера - у нас в конторе пишут один open source проект, в котором задействован алгоритм Смита-Ватермана (кому интересно, может погуглить что это), так вот, когда его переписали через интринсики (SSE2) скорость на некоторых данных возросла в 100 раз! Нехилая такая оптимизация)
Вот нормальный пример. Другое дело. Из этого получается, что от ассемблера не надо полностью отказываться. Значит он более чем нужен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2013, 20:11

Кнопки нет при программировании, а после запуска появляется
Помогите, пожалуйста. Скачал текстовый редактор с исходниками, и не могу исправить чтобы кнопка Recent Files в меню File была перед Exit....

Нужен специалист в Иб/программировании/Сис. Администировании для написания уникальных статей. Удаленно
Необходим человек со знаниями в ИБ, программировании на любом языке, в том числе mobile и прочее. Нужны авторские статьи. Тематика нужна...

Нужен-ли assembler C++ программисту?
Вчера с друзьями спорили, нужен-ли assembler современному программисту (не микроконтроллеров и т.п). Вот я пишу на С++, асемблер не учил...

gss visual assembler 3.9 нужен код активации
Люди добрые, помогите мну нубу! Нужен activation code на GSS VISUAL ASSEMBLER 3.9 Случайно наткнулся на эту среду разработки для...

Нужен код на Assembler для создания герба Галисии
Парни помогите! Проблема в том, что преподаватель дал лабораторную работу, чтобы на экране с помощью ассемблера выводился герб Галисии....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru