Содержание статьиИдентификация оператора +Идентификация оператора –Идентификация оператора /Оптимизированный вариантC++ BuilderИдентификация оператора %Идентификация оператора *C++ BuilderКомплексные операторыВыводыНа первый взгляд кажется, что в распознавании арифметических операций нет ничего сложного. Однако даже неоптимизирующие компиляторы используют ряд хитрых приемов, которые превращают нахождение математических операторов в головную боль. Давай изучим теорию и потренируемся на практике обнаруживать математические операции в бинарном коде программ, подготовленных разными компиляторами. Идентификация оператора +В общем случае оператор + транслируется либо в машинную инструкцию ADD, «перемалывающую» целочисленные операнды, либо, с учетом наличия в процессоре поддержки SSE (а без нее процессоры уже давным‑давно не выпускаются), в инструкцию ADDSS, обрабатывающую вещественные значения одинарной точности, и ADDSD — двойной точности.Оптимизирующие компиляторы могут заменять ADD xxx, 1 более компактной командой INC xxx, а конструкцию c = a + b + const транслировать в машинную инструкцию LEA c, [a + b + const]. Такой трюк позволяет одним махом складывать несколько переменных, возвратив полученную сумму в любом регистре общего
Скачать:
Скриншоты:
Важно:
Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.