Online Compiler Nasm

section .data a11 dd 0 a12 dd 0 a21 dd 0 a22 dd 0 b1 dd 0 b2 dd 0 na11 dd 0 na12 dd 0 na21 dd 0 na22 dd 0 m0 dd 0 m1 dd 0 m2 dd 0 m3 dd 0 m4 dd 0 m5 dd 0 m6 dd 0 m7 dd 0 m8 dd 0 m9 dd 0 m10 dd 0 m11 dd 0 m12 dd 0 m13 dd 0 m14 dd 0 m15 dd 0 xb2 dd 0 xb1 dd 0 xx dd 0 yb2 dd 0 yb1 dd 0 yx dd 0 xres dd 0 yres dd 0 section .text extern io_get_udec, io_print_udec, io_newline global main main: push ebx push esi push edi call io_get_udec mov [a11], eax call io_get_udec mov [a12], eax call io_get_udec mov [a21], eax call io_get_udec mov [a22], eax call io_get_udec mov [b1], eax call io_get_udec mov [b2], eax mov eax, [a11] not eax mov [na11], eax mov eax, [a12] not eax mov [na12], eax mov eax, [a21] not eax mov [na21], eax mov eax, [a22] not eax mov [na22], eax mov eax, [na11] and eax, [na12] and eax, [na21] and eax, [na22] mov [m0], eax mov eax, [a11] and eax, [na12] and eax, [na21] and eax, [na22] mov [m1], eax mov eax, [na11] and eax, [a12] and eax, [na21] and eax, [na22] mov [m2], eax mov eax, [a11] and eax, [a12] and eax, [na21] and eax, [na22] mov [m3], eax mov eax, [na11] and eax, [na12] and eax, [a21] and eax, [na22] mov [m4], eax mov eax, [a11] and eax, [na12] and eax, [a21] and eax, [na22] mov [m5], eax mov eax, [na11] and eax, [a12] and eax, [a21] and eax, [na22] mov [m6], eax mov eax, [a11] and eax, [a12] and eax, [a21] and eax, [na22] mov [m7], eax mov eax, [na11] and eax, [na12] and eax, [na21] and eax, [a22] mov [m8], eax mov eax, [a11] and eax, [na12] and eax, [na21] and eax, [a22] mov [m9], eax mov eax, [na11] and eax, [a12] and eax, [na21] and eax, [a22] mov [m10], eax mov eax, [a11] and eax, [a12] and eax, [na21] and eax, [a22] mov [m11], eax mov eax, [na11] and eax, [na12] and eax, [a21] and eax, [a22] mov [m12], eax mov eax, [a11] and eax, [na12] and eax, [a21] and eax, [a22] mov [m13], eax mov eax, [na11] and eax, [a12] and eax, [a21] and eax, [a22] mov [m14], eax mov eax, [a11] and eax, [a12] and eax, [a21] and eax, [a22] mov [m15], eax mov eax, [m4] or eax, [m6] or eax, [m7] mov [xb2], eax mov eax, [m1] or eax, [m5] or eax, [m9] or eax, [m13] mov [xb1], eax mov eax, [m11] or eax, [m14] mov [xx], eax mov eax, [m8] or eax, [m9] or eax, [m11] or eax, [m12] mov [yb2], eax mov eax, [m2] or eax, [m3] or eax, [m6] or eax, [m10] or eax, [m14] or eax, [m15] mov [yb1], eax mov eax, [m7] or eax, [m13] mov [yx], eax mov eax, [xb2] and eax, [b2] mov ebx, [xb1] and ebx, [b1] or eax, ebx mov ecx, [b1] xor ecx, [b2] mov edx, [xx] and edx, ecx or eax, edx mov [xres], eax mov eax, [yb2] and eax, [b2] mov ebx, [yb1] and ebx, [b1] or eax, ebx mov ecx, [b1] xor ecx, [b2] mov edx, [yx] and edx, ecx or eax, edx mov [yres], eax mov eax, [xres] call io_print_udec call io_newline mov eax, [yres] call io_print_udec call io_newline pop edi pop esi pop ebx xor eax, eax ret
Этот код решает систему двух линейных булевых уравнений с двумя неизвестными. Он вводит 6 чисел (a11, a12, a21, a22, b1, b2), затем вычисляет все 16 возможных комбинаций значений переменных (m0..m15) с помощью побитовых операций, и на основе этих комбинаций находит решение xres и yres.

- Обратите внимание, что переменные a11, a12, a21, a22, b1, b2 — это 32-битные числа, но код обрабатывает их как битовые векторы, где каждый бит соответствует отдельному уравнению. Вычисления m0..m15 строят все возможные комбинации значений (a11, a12, a21, a22) с учётом их отрицаний.

- В конце код собирает xres и yres через комбинации m-переменных, но логика сборки может содержать ошибку: проверьте, правильно ли выбраны номера m для xb2, xb1, xx, yb2, yb1, yx — возможно, некоторые комбинации пропущены или лишние.