Cod sursa(job #2530465)

Utilizator Dinu_BlanovschiDinu Blanovschi Dinu_Blanovschi Data 24 ianuarie 2020 20:27:31
Problema A+B Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.1 kb
asm(
".text\n"
"	.comm read, 24\n"
"	.comm FILE_IN, 8\n"
"	.comm FILE_OUT, 8\n"
".section .rodata"
"\n"
"digits: .ascii \"0123456789\"\n"
"PATH_IN: .asciz \"adunare.in\"\n"
"PATH_OUT: .asciz \"adunare.out\"\n"
"\n"
".text\n"
".globl main\n"
"\n"
"_print_x:\n"
"	pushq %rax\n"
"	pushq %rdx\n"
"	movq $10, %r8\n"
"	xorq %rdx, %rdx\n"
"	divq %r8\n"
"	test %rax, %rax\n"
"	jz _print_x.l1\n"
"	callq _print_x@PLT\n"
"_print_x.l1:\n"
"	movq $1, %rax\n"
"	movq FILE_OUT@GOTPCREL(%rip), %rdi\n"
"   movq (%rdi), %rdi\n"
"	movq digits@GOTPCREL(%rip), %rsi\n"
"   addq %rdx, %rsi\n"
"	movq $1, %rdx\n"
"	syscall\n"
"	popq %rdx\n"
"	popq %rax\n"
"	ret\n"
"\n"
"parse_int:\n"
"	movq $0, %rax\n"
"parse_int.l2:\n"
"	movq read@GOTPCREL(%rip), %rcx\n"
"   movb (%rcx, %rdi), %cl\n"
"	cmpb $0, %cl\n"
"	je parse_int.l1\n"
"	cmpb $32, %cl\n"
"	je parse_int.l1\n"
"	cmpb $'\n', %cl\n"
"	je parse_int.l1\n"
"\n"
"	subb $'0', %cl\n"
"	movq $10, %r8\n"
"	mulq %r8\n"
"	\n"
"	movzbq %cl, %rcx\n"
"	addq %rcx, %rax\n"
"	incq %rdi\n"
"	jmp parse_int.l2\n"
"parse_int.l1:\n"
"	ret\n"
"\n"
"_error:\n"
"	neg %rax\n"
"	movq %rax, %rdi\n"
"	movq $60, %rax\n"
"	syscall\n"
"\n"
"main:\n"
"	movq $2, %rax\n"
"	movq PATH_IN@GOTPCREL(%rip), %rdi\n"
"	movq $0, %rsi\n"
"	syscall\n"
"	orq %rax, %rax\n"
"	js _error\n"
"	movq FILE_IN@GOTPCREL(%rip), %rbx\n"
"   movq %rax, (%rbx)"
"\n"
"	movq $2, %rax\n"
"	movq PATH_OUT@GOTPCREL(%rip), %rdi\n"
"	movq $577, %rsi\n"
"	movq $0644, %rdx\n"
"	syscall\n"
"	orq %rax, %rax\n"
"	js _error\n"
"	movq FILE_OUT@GOTPCREL(%rip), %rbx\n"
"   movq %rax, (%rbx)"
"\n"
"	movq $0, %rax\n"
"	movq FILE_IN@GOTPCREL(%rip), %rdi\n"
"   movq (%rdi), %rdi\n"
"	movq read@GOTPCREL(%rip), %rsi\n"
"	movq $23, %rdx\n"
"	syscall\n"
"\n"
"	movq $0, %rdi\n"
"	callq parse_int\n"
"\n"
"	pushq %rax\n"
"	incq %rdi\n"
"\n"
"	callq parse_int\n"
"\n"
"	addq (%rsp), %rax\n"
"\n"
"	callq _print_x\n"
"\n"
"	movq $3, %rax\n"
"	movq FILE_IN@GOTPCREL(%rip), %rdi\n"
"   movq (%rdi), %rdi\n"
"	syscall\n"
"	\n"
"	movq $3, %rax\n"
"	movq FILE_OUT@GOTPCREL(%rip), %rdi\n"
"   movq (%rdi), %rdi\n"
"	syscall\n"
"	\n"
"	movq $60, %rax\n"
"	xorq %rdi, %rdi\n"
"	syscall\n"
);