Ассемблерное представление математических операций
В этой статье мы поговорим об основных математических операциях и переведем каждую из них в ассемблерный код. Будут рассмотрены такие операции, как сложение и вычитание, умножение и деление, поразрядная конъюнкция (И) и дизъюнкция (ИЛИ), поразрядное отрицание и поразрядное исключающее ИЛИ, битовый сдвиг вправо и влево. Понимание этих аспектов поможет вам продвинуться в изучении реверс-инжиниринга.
Код математических функций следующий:
Итак, сначала присвоим переменной A значение 0A в 16-ричной системе счисления либо 10 в десятичной. В свою очередь, переменной B присвоим значение 0F или 15 в десятичной.
Для сложения воспользуемся инструкцией add:
Для вычитания подойдет инструкция sub:
Для умножения — imul:
Для деления воспользуемся инструкцией idiv. Кроме того, задействуем оператор cdq — это необходимо для удвоения размера EAX и чтобы результат деления поместился в регистре.
При поразрядной конъюнкции применим инструкцию and:
При дизъюнкции — or:
Для поразрядного исключающего ИЛИ — xor:
Для поразрядного отрицания — not:
Для битового сдвига вправо — sar:
Для битового сдвига влево — shl:
По материалам статьи «BOLO: Reverse Engineering — Part 1 (Basic Programming Concepts)».