这是我试图转换的代码
int sum(int n) {
if(n<=1)
return n;
else
return n+sum(n-1);
}
我需要帮助将c +代码转换为机器语言
i assume you use an add
4000000000 to initialize eax to 0 which would be n
and jump greater equal would be
7500000001
我在功能部分丢失了:
答案 0 :(得分:0)
如果您使用以下代码编译代码段
g++ -g -c filename.cpp
GCC将生成一个未链接的(-c
)目标文件,其中包含名为-g
的调试信息(filename.o
)。如果你然后运行
objdump -d -M intel -S filename.o
它将为文件输出一个很好的dissasembly +机器代码显示,如下所示:
machine-code.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <_Z3sumi>:
int sum(int n) {
0: 55 push rbp
1: 48 89 e5 mov rbp,rsp
4: 48 83 ec 10 sub rsp,0x10
8: 89 7d fc mov DWORD PTR [rbp-0x4],edi
if(n<=1)
b: 83 7d fc 01 cmp DWORD PTR [rbp-0x4],0x1
f: 7f 05 jg 16 <_Z3sumi+0x16>
return n;
11: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]
14: eb 10 jmp 26 <_Z3sumi+0x26>
else
return n+sum(n-1);
16: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]
19: 83 e8 01 sub eax,0x1
1c: 89 c7 mov edi,eax
1e: e8 00 00 00 00 call 23 <_Z3sumi+0x23>
23: 03 45 fc add eax,DWORD PTR [rbp-0x4]
}
26: c9 leave
27: c3 ret
这可能对你有用。在这种情况下,它生成的机器代码似乎是:
554889e54883ec10897dfc837dfc017f058b45fceb108b45fc83e80189c7e8000000000345fcc9c3