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

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

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

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

Screenshot_1-1801-878ca7.png

Итак, сначала присвоим переменной A значение 0A в 16-ричной системе счисления либо 10 в десятичной. В свою очередь, переменной B присвоим значение 0F или 15 в десятичной.

Screenshot_2-1801-37ed17.png

Для сложения воспользуемся инструкцией add:

Screenshot_3-1801-7f16e9.png

Для вычитания подойдет инструкция sub:

Screenshot_4-1801-04f16b.png

Для умножения — imul:

Screenshot_5-1801-2e9741.png

Для деления воспользуемся инструкцией idiv. Кроме того, задействуем оператор cdq — это необходимо для удвоения размера EAX и чтобы результат деления поместился в регистре.

Screenshot_6-1801-68884e.png

При поразрядной конъюнкции применим инструкцию and:

Screenshot_7-1801-ab009c.png

При дизъюнкции — or:

Screenshot_8-1801-6cd392.png

Для поразрядного исключающего ИЛИ — xor:

Screenshot_9-1801-da74c7.png

Для поразрядного отрицания — not:

Screenshot_10-1801-ba3a2a.png

Для битового сдвига вправо — sar:

Screenshot_11-1801-a99359.png

Для битового сдвига влево — shl:

Screenshot_12-1801-22a7e6.png

По материалам статьи «BOLO: Reverse Engineering — Part 1 (Basic Programming Concepts)».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто