Result

WA

Duration

515ms

Code [DL]

%macro output 1
pushad
mov eax,%1
call print
popad
%endmacro
%macro endl 0
output new_line
%endmacro
%macro outputd 1
dtoa buf,%1
output buf
%endmacro
%macro input 2
pushad
push %1
push %2
call input_
popad
%endmacro
%macro inputd 0-1 eax
input buf,11
atod buf,%1
%endmacro
%macro atod 1-2 eax
push eax
push ebx
push ecx
push edx
push edi
push %1
call convert_ascii
add esp,4
mov [dbuf],ecx
pop edi
pop edx
pop ecx
pop ebx
pop eax
mov %2,[dbuf]
%endmacro
%macro dtoa 2
pushad
push %1
push %2
call convert_double
popad
%endmacro 
section .data
sign: db 0
section .bss
buf: resb 11
dbuf: resd 1
section .text
new_line: db 10,0
print:
mov edi,-1
call get_string
mov ecx,eax
mov edx,edi
mov eax,4
mov ebx,1
int 80h
ret
get_string:
inc edi
cmp byte [eax+edi],0
jne get_string
ret
input_:
mov ecx,[esp+8]
mov edx,[esp+4]
mov eax,3
mov ebx,0
int 80h
ret 8
convert_ascii:
mov edx,[esp+4]
mov edi,-1
mov ecx,0
mov eax,0
mov byte [sign],0
jmp determine_sign
convert_continue:
call determine_decimal
cmp byte [sign],1
je negate
ret
determine_sign:
cmp byte [edx],2dh
jne convert_continue
non_positive:
mov byte [sign],1
inc edi
jmp convert_continue
determine_decimal:
mov ebx,0
inc edi
cmp byte [edx+edi],30h
jl return
cmp byte [edx+edi],39h
jg return
mov ebx,0
mov bl,[edx+edi]
sub bl,30h
push edx
mov eax,ecx
mov ecx,10
mul dword ecx
mov ecx,eax
add ecx,ebx
pop edx
jmp determine_decimal
return:
ret
negate:
neg ecx
mov byte [sign],0
mov eax,ecx
ret
convert_double:
mov ebx,[esp+8]
mov eax,[esp+4]
sub ecx,ecx
mov esi,10
mov byte [sign],0
cmp eax,0
je input_is_zero
jl _negetive
jmp get_numbers
_negetive:
neg eax
mov byte [sign],1
get_numbers:
cmp eax,0
je put_numbers
cdq
div esi
add edx,30h
push edx
inc ecx
jmp get_numbers
put_numbers:
cmp byte [sign],0
je add_numbers
add_negation: 
mov byte [ebx],'-'
inc ebx
add_numbers:
pop edx
mov byte [ebx],dl
inc ebx
loop add_numbers
mov byte [ebx],0
ret 8
input_is_zero:
mov byte [ebx],30h
inc ebx
mov byte [ebx],0
ret 8
section .data
a: times 4 db 0
b: times 4 db 0
c: times 4 db 0
_start:
push ebx
push ecx
inputd a
inputd b
inputd c

stdin

50 26 09
95 84 71
02 70 41
80 19 45

stdout

stderr

/tmp/code.asm:168: error: invalid combination of opcode and operands
/tmp/code.asm:169: error: invalid combination of opcode and operands
/tmp/code.asm:170: error: invalid combination of opcode and operands
gcc: error: /tmp/code.o: No such file or directory
gcc: fatal error: no input files
compilation terminated.
/bin/script: 16: /bin/script: /tmp/code: not found
rm: cannot remove '/tmp/code.o': No such file or directory
rm: cannot remove '/tmp/code': No such file or directory

strace