Result

WA

Duration

502ms

Code [DL]

global _start
%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 .text
_start:
push ebx
push ecx
inputd
push eax
inputd
push eax
inputd
push eax
inputd
push eax
inputd
push eax
inputd
push eax
inputd
push eax
inputd
push eax
inputd
push eax
outputd [esp-4]

stdin

89 09 44
95 71 42
35 34 04
11 94 91

stdout

stderr

/tmp/code.asm:184: error: operation size not specified
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