需要帮助尝试将c +转换为机器语言

时间:2014-04-30 22:31:39

标签: assembly x86

这是我试图转换的代码

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

我在功能部分丢失了:

1 个答案:

答案 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