1) Это звучит (для меня) как невыполнимая задача, если оптимизация включена (или может быть) включена. Вы никогда не можете быть уверены в том, что компилятор будет делать во время оптимизации. Я бы определенно сделал что-то вроде повторного использования предыдущего результата. Если бы это было возможно / возможно, я бы попытался включить необработанный фрагмент ассемблера для профилирования (так что вы можете быть уверены, что нет никаких дополнительных затрат, хотя они все еще могут быть оптимизированы).
2) Что касается инструкций: одна команда на ассемблере - это одна инструкция. Например. a += i
будет - в зависимости от доступного набора команд и прочего - скорее всего, приведет к 4 инструкциям: прочитайте a, прочитайте i, добавьте, напишите a. Читать сборку довольно просто. В зависимости от набора инструкций / процессора могут быть разные «направления» для чтения (то есть «от -> до»). Ассемблеры x86 (и те, что для большинства других распространенных процессоров) предпочтут instruction target, source
, в то время как DSP предпочитают использовать instruction source, target
. Просто важно знать: перемещение данных должно происходить через регистры. Таким образом, даже одно назначение, такое как a = b
, приведет к двум инструкциям (b
для регистрации и регистрации к a
).
В общем, если этот ответ идет в неправильном направлении, попробуйте подробнее рассказать о вашей конкретной задаче и ее требованиях (например, какой компилятор следует использовать) и напишите мне короткий комментарий.