Цитата(Degun @ Oct 23 2007, 14:54)

Code Composer Studio v 3.3; Процессор DM642 на evalution board.
Имеется программка, написанная на C++. После анализа её ассемблерного кода выяснилось, что после многих команд (LDW, ADD, CMPLT, AND, LDHU и др.) компилятор вставляет команду NOP, что естественно замедляет функционирование программы. Для чего это? Можно ли отключить вставку операторов NOP в ассемблерный код?
Прочтите доку на процессор и Вам станет понятно назначение NOP-ов, которые Вам в код всовывает компилятор...
Я не знаю Вашего процессора, но это достаточно стандартный прием во многих микроконтроллерах, которые работают по принципу конвейера...
Делается - чаще всего для того, чтобы дать возможность процессору закончить записб результата на регистры управления или в регистры/ячейки внешней памяти... Т.к. иначе - возможно использование "старого" значения в следующей команде...
Вышесказанное - это лишь возможные причины - настоящие - в документации на Ваш микроконтроллер...
Попытки убрать такие NOP-ы могут привести к сбоям, а могут и остаться безнаказанными - все зависит от операндов следующих за NOP-ами команд...
В любом случае - прежде чем убирать такие NOP-ы - надо как следует подумать...
Если компилятор "умный" - то он сам анализирует - надо вставлять NOP-ы или нет...
Если глупый - он вставляет их "не думая" в критических местах так - как это решил нужным сделать разработчик компилятора и возможно - часть их лишние...
Общая рекомендация - лучше их не убирать... Не так уж много времени они обчно забирают
Сообщение отредактировал Николай Z - Dec 6 2007, 23:26