基本c到装配的说明

时间:2015-10-04 12:40:15

标签: c assembly

我一直在努力学习如何准确地解释assembly程序与同一c程序相比正在做什么。

例如: C

#include<stdio.h>
#include<limits.h>

int main() {

int joe = 26;

}

组件

push   %rbp
mov    %rsp,%rbp
xor    %eax,%eax

movl   $0x1a,-0x4(%rbp)
pop    %rbp
retq  

有人可以帮助我绘制出我写的这个非常简单的程序吗?

谢谢

1 个答案:

答案 0 :(得分:-3)

汇编程序代码不会精确映射到c#/ c ++ / c代码。

当代码在内存中创建一个保留位置时,将val推入其中(1a为十六进制),然后从内存中删除它。它正在做很多在“背景”中发生的事情,而更高级的语言隐藏在你身上。

将%rbp推入堆栈:

push   %rbp

将%rbp内存中的任何内容移动到%rsp:

mov    %rsp,%rbp

xor是一个逻辑操作,答案是0.这会初始化内存,就像你明确地做int joe = 0一样,这是c中int的默认值。为什么不将0移入var?可能是因为xor比将值移动到内存中的位置更快:

xor    %eax,%eax

将1a(十六进制)的值移动/加载到rdp

movl   $0x1a,-0x4(%rbp)

从堆栈中删除rbp:

pop    %rbp

出口:

retq