In the document attached below explain each block of assembly code. There are different blocks of 4 assembly codes, place explanation in table provided. Then convert the entire assembly code to C. Typ
Assembly Code: | Explanation |
push %rbp mov %rsp,%rbp sub $0x10,%rsp movl $0x1,-0x8(%rbp) jmp 0x4005c5 <main+72> movl $0x1,-0x4(%rbp) jmp 0x4005bb <main+62> mov -0x8(%rbp),%eax imul -0x4(%rbp),%eax mov %eax,%ecx | |
mov -0x4(%rbp),%edx mov -0x8(%rbp),%eax mov %eax,%esi mov $0x400664,%edi mov $0x0,%eax callq 0x400450 <printf@plt> addl $0x1,-0x4(%rbp) cmpl $0x9,-0x4(%rbp) jle 0x400597 <main+26> addl $0x1,-0x8(%rbp) cmpl $0x9,-0x8(%rbp) jle 0x40058e <main+17> mov $0x0,%edi callq 0x400480 <exit@plt> |
Code 2:
Assembly code: | |
push %rbp mov %rsp,%rbp movsd %xmm0,-0x8(%rbp) movsd -0x8(%rbp),%xmm1 movsd 0x14d(%rip),%xmm0 #0x400750 mulsd %xmm1,%xmm0 mulsd -0x8(%rbp),%xmm0 mulsd -0x8(%rbp),%xmm0 movsd %xmm0,-0x10(%rbp) mov -0x10(%rbp),%rax mov %rax,-0x10(%rbp) movsd -0x10(%rbp),%xmm0 pop %rbp retq | Calculate V function |
push %rbp mov %rsp,%rbp sub $0x20,%rsp mov $0x400728,%edi mov $0x0,%eax callq 0x4004b0 <printf@plt> lea -0xc(%rbp),%rax mov %rax,%rsi mov $0x400736,%edi mov $0x0,%eax | Main function |
callq 0x4004e0 <__isoc99_scanf@plt> mov -0xc(%rbp),%eax cvtsi2sd %eax,%xmm0 callq 0x4005ed <CalculateV> movsd %xmm0,-0x18(%rbp) mov -0x18(%rbp),%rax mov %rax,-0x8(%rbp) mov -0x8(%rbp),%rax mov %rax,-0x18(%rbp) movsd -0x18(%rbp),%xmm0 | |
mov $0x400739,%edi mov $0x1,%eax callq 0x4004b0 <printf@plt> mov $0x0,%edi callq 0x4004f0 <exit@plt> |
Code 3:
Assembly Code: | Comments |
push %rbp mov %rsp,%rbp sub $0x10,%rsp movl $0x1,-0x4(%rbp) mov $0x400794,%edi callq 0x4004c0 <puts@plt> lea -0x10(%rbp),%rax mov %rax,%rsi mov $0x4007a9,%edi mov $0x0,%eax | Main function |
callq 0x4004f0 <__isoc99_scanf@plt> mov -0x10(%rbp),%eax sub $0x1,%eax mov %eax,-0x4(%rbp) movl $0x1,-0x8(%rbp) jmp 0x400683 <main+150> movl $0x1,-0xc(%rbp) jmp 0x400645 <main+88> mov $0x20,%edi callq 0x4004b0 <putchar@plt> | |
addl $0x1,-0xc(%rbp) mov -0xc(%rbp),%eax cmp -0x4(%rbp),%eax jle 0x400637 <main+74> subl $0x1,-0x4(%rbp) movl $0x1,-0xc(%rbp) jmp 0x400668 <main+123> mov $0x2a,%edi callq 0x4004b0 <putchar@plt> |
Code 4:
Assembly Code: | Comments: |
push %rbp mov %rsp,%rbp sub $0x20,%rsp movq $0x0,-0x18(%rbp) movq $0x1,-0x10(%rbp) mov $0x400718,%edi mov $0x0,%eax callq 0x400470 <printf@plt> lea -0x20(%rbp),%rax mov %rax,%rsi | Main function |
mov $0x400732,%edi mov $0x0,%eax callq 0x4004a0 <__isoc99_scanf@plt> jmp 0x40065a <main+189> mov -0x20(%rbp),%rcx movabs $0x6666666666666667,%rdx mov %rcx,%rax imul %rdx sar $0x2,%rdx mov %rcx,%rax | |
sar $0x3f,%rax sub %rax,%rdx mov %rdx,%rax mov %rax,-0x8(%rbp) mov -0x8(%rbp),%rdx mov %rdx,%rax shl $0x2,%rax add %rdx,%rax add %rax,%rax |