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

 
 
> Зачем 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
 
Start new topic
Ответов
Палыч
сообщение 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



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

 


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


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