Ассемблерное представление математических операций

В этой статье мы поговорим об основных математических операциях и переведем каждую из них в ассемблерный код. Будут рассмотрены такие операции, как сложение и вычитание, умножение и деление, поразрядная конъюнкция (И) и дизъюнкция (ИЛИ), поразрядное отрицание и поразрядное исключающее ИЛИ, битовый сдвиг вправо и влево. Понимание этих аспектов поможет вам продвинуться в изучении реверс-инжиниринга.

Код математических функций следующий:

Итак, сначала присвоим переменной 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)».