global main
extern io_get_dec
extern io_print_char
extern io_print_dec
section .bss
var_a resq 1
var_b resq 1
var_c resq 1
var_q resq 1
var_d resq 1
var_t resq 1
var_q_div_a resq 1
numerator resq 1
divisor resq 1
var_y resq 1
section .text
; -----------------------------------------------
; func
;
; make constraction for equasions (ebx - (var_q_div_a)* ecx)
;
; EXPECTS: EBX, ECX
;
; DESTROYS: EAX, EDX, EBX, ECX
;
;
; RETURN: EAX
; -----------------------------------------------
func:
xor eax, eax
mov eax, [var_q_div_a]
mul ecx
mov ecx, eax
mov eax, ebx
xor eax, ecx
ret
find_x:
xor eax, eax
mov eax, [var_b]
mov ecx, [var_y]
mul ecx
mov ecx, eax
mov eax, [var_c]
xor eax, ecx
xor ebx, ebx
mov ebx, [var_a]
xor edx, edx
div ebx
ret
main:
mov ebp, esp; for correct debugging
xor eax, eax
call io_get_dec
mov [var_a], eax
xor eax, eax
call io_get_dec
mov [var_b], eax
xor eax, eax
call io_get_dec
mov [var_q], eax
xor eax, eax
call io_get_dec
mov [var_d], eax
xor eax, eax
call io_get_dec
mov [var_c], eax
xor eax, eax
call io_get_dec
mov [var_t], eax
xor ebx, ebx
mov ebx, [var_a]
xor eax, eax
xor edx, edx
mov eax, [var_q]
div ebx
mov [var_q_div_a], eax
mov ebx, [var_t]
mov ecx, [var_c]
call func
mov [numerator], eax
mov ebx, [var_d]
mov ecx, [var_b]
call func
mov [divisor], eax
xor ebx, ebx
mov ebx, [divisor]
xor eax, eax
xor edx, edx
mov eax, [numerator]
div ebx
mov [var_y], eax
mov ecx, [var_y]
call io_print_dec
mov eax, ' '
call io_print_char
call find_x
call io_print_dec
xor eax, eax
ret