6factorial
Source Code
class Factorial {
public void main() {
Print pp;
pp = new Print();
pp.Integer(new Fac().ComputeFac(10));
}
}
class Fac {
public int ComputeFac(int num) {
int num_aux;
if (num < 1)
num_aux = 1;
else num_aux = num * (this.ComputeFac(num - 1));
return num_aux;
}
}
class Print {
int v;
public void Integer(int i) {
int tmp;
int c;
tmp = 0;
c = 0;
while (0 < i) {
tmp = tmp * 10 + i % 10;
i = i /10;
c = c + 1;
}
while (0 < tmp) {
print(tmp % 10 + 48);
tmp = tmp /10;
c = c - 1;
}
while (0 < c) {
print(48);
c = c - 1;
}
}
}







Results
Assembly
.globl main
main:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
movq $0, %rax
movq %rax, %rdi
callq malloc@PLT
testq %rax, %rax
jz fail_exit
pushq %rax
callq __LABEL0
popq %rax
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL5:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-8, %rsp
##MovL %37 <- 0
movq $0, %rax
##MoMo %38 <- %37
movq %rax, %rcx
##MovL %39 <- 0
movq $0, %rax
##MoMo %40 <- %39
movq %rax, %rbx
__LABEL6:
__LABEL7:
##MovL %41 <- 0
movq $0, %rax
##MoMo %42 <- %-1
movq %rbp, %r8
##MovL %43 <- 24
movq $24, %rdx
##MoOp %44 <- %42,%43
addq %r8, %rdx
##MToR %45 <- #44
movq (%rdx), %rdx
##MoOp %46 <- %41,%45
cmpq %rax, %rdx
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %46
testq %rax, %rax
jnz __LABEL8
__LABEL9:
##Jump 10
jmp __LABEL10
__LABEL10:
__LABEL12:
__LABEL13:
##MovL %69 <- 0
movq $0, %rdx
##MoMo %70 <- %38
movq %rcx, %rax
##MoOp %71 <- %69,%70
cmpq %rdx, %rax
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %71
testq %rax, %rax
jnz __LABEL14
__LABEL15:
##Jump 16
jmp __LABEL16
__LABEL16:
__LABEL18:
__LABEL19:
##MovL %83 <- 0
movq $0, %rcx
##MoMo %84 <- %40
movq %rbx, %rax
##MoOp %85 <- %83,%84
cmpq %rcx, %rax
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %85
testq %rax, %rax
jnz __LABEL20
__LABEL21:
##Jump 22
jmp __LABEL22
__LABEL22:
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL20:
__LABEL23:
##MovL %86 <- 48
movq $48, %rax
##Prin %86
pushq %r8 ## prepare print call
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rcx ## prepare print call
pushq %rdx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rdx
popq %rcx
popq %rbx
popq %rax
popq %r8
##MoMo %87 <- %40
##MovL %88 <- 1
movq $1, %rax
##MoOp %89 <- %87,%88
imulq $-1, %rax
addq %rbx, %rax
##MoMo %40 <- %89
movq %rax, %rbx
##Jump 19
jmp __LABEL19
__LABEL14:
__LABEL17:
##MoMo %72 <- %38
movq %rcx, %rdx
##MovL %73 <- 10
movq $10, %rax
##MoOp %74 <- %72,%73
#%rdx A:%rdx B:%rax
pushq %rax
movq %rax, %rdi
movq %rdx, %rax
cqto
idiv %rdi
popq %rax
##MovL %75 <- 48
movq $48, %rax
##MoOp %76 <- %74,%75
addq %rdx, %rax
##Prin %76
pushq %r8 ## prepare print call
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rcx ## prepare print call
pushq %rdx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rdx
popq %rcx
popq %rbx
popq %rax
popq %r8
##MoMo %77 <- %38
##MovL %78 <- 10
movq $10, %rax
##MoOp %79 <- %77,%78
pushq %rdx
movq %rax, %rdi
movq %rcx, %rax
cqto
idiv %rdi
popq %rdx
##MoMo %38 <- %79
movq %rax, %rcx
##MoMo %80 <- %40
##MovL %81 <- 1
movq $1, %rax
##MoOp %82 <- %80,%81
imulq $-1, %rax
addq %rbx, %rax
##MoMo %40 <- %82
movq %rax, %rbx
##Jump 13
jmp __LABEL13
__LABEL8:
__LABEL11:
##MoMo %47 <- %38
##MovL %48 <- 10
movq $10, %rax
##MoOp %49 <- %47,%48
imul %rcx, %rax
##MoMo %50 <- %-1
movq %rbp, %rdx
##MovL %51 <- 24
movq $24, %rcx
##MoOp %52 <- %50,%51
addq %rdx, %rcx
##MToR %53 <- #52
movq (%rcx), %rdx
##MovL %54 <- 10
movq $10, %rcx
##MoOp %55 <- %53,%54
#%rcx A:%rdx B:%rcx
pushq %rax
pushq %rdx
movq %rdx, %rax
cqto
idiv %rcx
movq %rdx, %rcx
popq %rdx
popq %rax
##MoOp %56 <- %49,%55
addq %rcx, %rax
##MoMo %38 <- %56
movq %rax, %rcx
##MoMo %57 <- %-1
movq %rbp, %rdx
##MovL %58 <- 24
movq $24, %rax
##MoOp %59 <- %57,%58
addq %rdx, %rax
##MToR %60 <- #59
movq (%rax), %rdx
##MovL %61 <- 10
movq $10, %rax
##MoOp %62 <- %60,%61
pushq %rax
pushq %rdx
movq %rax, %rdi
movq %rdx, %rax
cqto
idiv %rdi
movq %rax, %r8
popq %rdx
popq %rax
##MoMo %63 <- %-1
movq %rbp, %rdx
##MovL %64 <- 24
movq $24, %rax
##MoOp %65 <- %63,%64
addq %rdx, %rax
##RToM #65 <- %62
movq %r8, (%rax)
##MoMo %66 <- %40
##MovL %67 <- 1
movq $1, %rax
##MoOp %68 <- %66,%67
addq %rbx, %rax
##MoMo %40 <- %68
movq %rax, %rbx
##Jump 7
jmp __LABEL7
__LABEL1:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-8, %rsp
##MoMo %10 <- %-1
movq %rbp, %rbx
##MovL %11 <- 24
movq $24, %rax
##MoOp %12 <- %10,%11
addq %rbx, %rax
##MToR %13 <- #12
movq (%rax), %rbx
##MovL %14 <- 1
movq $1, %rax
##MoOp %15 <- %13,%14
cmpq %rbx, %rax
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %15
testq %rax, %rax
jnz __LABEL2
__LABEL3:
##MoMo %16 <- %-1
movq %rbp, %rbx
##MovL %17 <- 16
movq $16, %rax
##MoOp %18 <- %16,%17
addq %rbx, %rax
##MToR %19 <- #18
movq (%rax), %rax
##MoMo %20 <- %19
##MoMo %21 <- %-1
movq %rbp, %rcx
##MovL %22 <- 24
movq $24, %rbx
##MoOp %23 <- %21,%22
addq %rcx, %rbx
##MToR %24 <- #23
movq (%rbx), %rcx
##MovL %25 <- 1
movq $1, %rbx
##MoOp %26 <- %24,%25
imulq $-1, %rbx
addq %rcx, %rbx
##MoMo %27 <- %26
movq %rbx, %rdx
##MoMo %28 <- %-1
movq %rbp, %rcx
##MovL %29 <- 24
movq $24, %rbx
##MoOp %30 <- %28,%29
addq %rcx, %rbx
##MToR %31 <- #30
movq (%rbx), %rbx
##PuAl
pushq %r8 ## prepare call
pushq %rax ## prepare call
pushq %rbx ## prepare call
pushq %rcx ## prepare call
pushq %rdx ## prepare call
##Push %27
pushq %rdx
##Push %20
pushq %rax
##Call (#544978966)
call __LABEL1
##PopD
add $8, %rsp
##PopD
add $8, %rsp
##PoAl
popq %rdx
popq %rcx
popq %rbx
popq %rax
popq %r8
##GRet
movq %rdi, %rax
##MoOp %33 <- %31,%32
imul %rbx, %rax
##MoMo %34 <- %33
##Jump 4
jmp __LABEL4
__LABEL4:
##MoMo %36 <- %34
##SRet
movq %rax, %rdi
movq %rbp, %rsp
popq %rbp
retq
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL2:
##MovL %35 <- 1
movq $1, %rax
##MoMo %34 <- %35
##Jump 4
jmp __LABEL4
__LABEL0:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-8, %rsp
##MoMa 0
pushq %r8 ## prepare malloc
pushq %rbx ## prepare malloc
pushq %rcx ## prepare malloc
pushq %rdx ## prepare malloc
movq $8, %rdi
callq malloc@PLT
testq %rax, %rax
jz fail_exit
movq %rax, %rax
popq %rdx
popq %rcx
popq %rbx
popq %r8
##MoMo %1 <- %0
##MoMo %2 <- %1
##MoMo %3 <- %2
##MoMa 4
pushq %r8 ## prepare malloc
pushq %rax ## prepare malloc
pushq %rcx ## prepare malloc
pushq %rdx ## prepare malloc
movq $0, %rdi
callq malloc@PLT
testq %rax, %rax
jz fail_exit
movq %rax, %rbx
popq %rdx
popq %rcx
popq %rax
popq %r8
##MoMo %5 <- %4
movq %rbx, %rcx
##MovL %6 <- 10
movq $10, %rbx
##MoMo %7 <- %6
##PuAl
pushq %r8 ## prepare call
pushq %rax ## prepare call
pushq %rbx ## prepare call
pushq %rcx ## prepare call
pushq %rdx ## prepare call
##Push %7
pushq %rbx
##Push %5
pushq %rcx
##Call (#544978966)
call __LABEL1
##PopD
add $8, %rsp
##PopD
add $8, %rsp
##PoAl
popq %rdx
popq %rcx
popq %rbx
popq %rax
popq %r8
##GRet
movq %rdi, %rbx
##MoMo %9 <- %8
##PuAl
pushq %r8 ## prepare call
pushq %rax ## prepare call
pushq %rbx ## prepare call
pushq %rcx ## prepare call
pushq %rdx ## prepare call
##Push %9
pushq %rbx
##Push %3
pushq %rax
##Call (#1296416700)
call __LABEL5
##PopD
add $8, %rsp
##PopD
add $8, %rsp
##PoAl
popq %rdx
popq %rcx
popq %rbx
popq %rax
popq %r8
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
fail_exit:
movl $1, %eax
popq %rbp
retq
Expected
3628800
Got
3628800