extern io_get_dec, io_print_dec, io_print_char
section .data
a11 dd 0
a12 dd 0
a21 dd 0
a22 dd 0
b1 dd 0
b2 dd 0
det dd 0
detx dd 0
dety dd 0
x1 dd 0
y1 dd 0
section .text
global main
main:
call io_get_dec
mov [a11], eax
call io_get_dec
mov [a12], eax
call io_get_dec
mov [a21], eax
call io_get_dec
mov [a22], eax
call io_get_dec
mov [b1], eax
call io_get_dec
mov [b2], eax
; a11x a12y b1
; a21x a22y b2
; x = b1 - a12y / a11
mov eax, [a11]
and eax, [a22]
mov [det], eax
mov eax, [a12]
and eax, [a21]
xor eax, [det]
mov [det], eax
mov eax, [a12]
and eax, [b2]
mov [detx], eax
mov eax, [a22]
and eax, [b1]
xor eax, [detx]
mov [detx], eax
mov eax, [a11]
and eax, [b2]
mov [dety], eax
mov eax, [a21]
and eax, [b1]
xor eax, [dety]
mov [dety], eax
;(a&x)^(b&y) = g
;x = g&a
;y = g&(!x)
mov eax, [a11]
or eax, [a21]
mov [a11], eax
mov eax, [b1]
and eax, [a11]
mov [x1], eax
mov edx, [b1]
not eax
and edx, eax
mov [y1], edx
;ansx = (detx & det) | (x1 & !det)
;ansy = (dety & det) | (y1 & !det)
mov eax, [detx]
and eax, [det]
mov ebx, [det]
not ebx
and ebx, [x1]
or eax, ebx
mov [x1], eax
mov eax, [dety]
and eax, [det]
mov ebx, [det]
not ebx
and ebx, [y1]
or eax, ebx
mov [y1], eax
mov eax, [x1]
call io_print_dec
mov eax, ' '
call io_print_char
mov eax, [y1]
call io_print_dec
xor eax, eax
ret