試しにX Cubicを解こうとしているのですが、Runtime Errorになってしまいます。
これがまずローカルで書いたコードです。
#include <stdio.h>
asm(
"_solve:\n\t"
"pushl %ebp\n\t"
"movl %esp,%ebp\n\t"
"andl $-16,%esp\n\t"
"subl $20,%esp\n\t"
"movb $37,8(%esp)\n\t"
"movb $100,9(%esp)\n\t"
"movb $0,10(%esp)\n\t"
"leal 8(%esp),%eax\n\t"
"movl %eax,(%esp)\n\t"
"leal 12(%esp),%eax\n\t"
"movl %eax,4(%esp)\n\t"
"call _scanf\n\t"
"movl 12(%esp),%eax\n\t"
"mull %eax\n\t"
"imull 12(%esp),%eax\n\t"
"movb $10,10(%esp)\n\t"
"movb $0,11(%esp)\n\t"
"movl %eax,4(%esp)\n\t"
"call _printf\n\t"
"movl $0,%eax\n\t"
"leave\n\t"
"ret\n\t"
);
extern int solve(void);
int main(void) {
return solve();
}試行錯誤しても、Runtime Errorが消えませんでした。
最後にこれを提出したのですが、もうどこを直すべきかわかりません。
#include <stdio.h>
asm(
"solve:\n\t"
"pushq %rbp\n\t"
"movq %rsp,%rbp\n\t"
"andq $-16,%rsp\n\t"
"subq $32,%rsp\n\t"
"movb $37,16(%rsp)\n\t"
"movb $100,17(%rsp)\n\t"
"movb $0,18(%rsp)\n\t"
"leaq 16(%rsp),%rax\n\t"
"movq %rax,(%rsp)\n\t"
"leaq 20(%rsp),%rax\n\t"
"movq %rax,8(%rsp)\n\t"
"call scanf\n\t"
"movl 20(%rsp),%eax\n\t"
"mull %eax\n\t"
"imull 20(%rsp),%eax\n\t"
"movb $10,18(%rsp)\n\t"
"movb $0,19(%rsp)\n\t"
"movl %eax,8(%rsp)\n\t"
"call printf\n\t"
"movl $0,%eax\n\t"
"leave\n\t"
"ret\n\t"
);
extern int solve(void);
int main(void) {
return solve();
}それともAOJでアセンブリを使用することは不可能なのでしょうか?
よろしくお願いします。