реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Зачем NOP перед while() ?
ISK2010
сообщение Oct 7 2010, 07:39
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 21-09-10
Из: г.Зеленоград
Пользователь №: 59 631



Использую Keil без оптимизации. При простомотре ассемблера нашел там лишний, на мой взгяд, NOP:

Код
  451:         while(!(*pRXNE)); 

0x080014A8 BF00      NOP; <------ЗАЧЕМ ОН ТУТ?  

0x080014AA F8D6C000  LDR      r12,[r6,#0x00]

0x080014AE F1BC0F00  CMP      r12,#0x00

0x080014B2 D0FA      BEQ      0x080014AA


И так во всех while(). Я не разберусь зачем туда ставит компилятор этот NOP, пока или сам не стану компилятором, или кто-нибудь не скажет зачем.

Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 7 2010, 10:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(ISK2010 @ Oct 7 2010, 11:39) *
Использую Keil без оптимизации.
Это - и есть результат трансляции без оптимизации. Если оптимизация отключена(Level 0) - транслятор тупо использует некие шаблоны для перевода конструкций языка С на ассемблер. Правда, при этом некая "оптимизация" всё же присутствует - именно при этой "оптимизации" NOP'ы и появляются: например, транслятор применил некую команду, но чуть позже заметил, что можно без проблем заменить её другой, выполняющей аналогичное действие, но длина этой другой команды "чуток" короче - команда заменяется, но добавляется NOP (надо думать, чтобы общая длина программы не изменилась rolleyes.gif )...
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 7 2010, 12:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Судя по мнемонике у вас какой-то ARM? Если так, то следует напомнить, что у ARM имеется конвейер команд. Видимо компилятор посчитал NOP необходимым для загрузки конвейера при организации такого цикла.
Go to the top of the page
 
+Quote Post
ISK2010
сообщение Oct 8 2010, 04:42
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 21-09-10
Из: г.Зеленоград
Пользователь №: 59 631



Да, у меня CortexM3 (ST32F105). Я тоже думал про конвеер. А в данном случае этот ноп занимает такт? или нет?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 12:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016