向汇编解释基本c语言

向汇编解释基本c语言,c,assembly,C,Assembly,我一直在努力学习如何与同一个c程序相比,准确地破译一个assembly程序在做什么 例如: c #include<stdio.h> #include<limits.h> int main() { int joe = 26; } 有人能帮我设计出这个我写的非常琐碎的程序吗 < p>汇编代码并没有精确映射到C/C/C++/C代码。 代码在内存中创建一个保留位置,将val推入其中(1a是十六进制的),然后将其从内存中删除。它做了很多在“背景”中发生的事情,而更高级的

我一直在努力学习如何与同一个
c
程序相比,准确地破译一个
assembly
程序在做什么

例如: c

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

int main() {

int joe = 26;

}
有人能帮我设计出这个我写的非常琐碎的程序吗


<谢谢>

< p>汇编代码并没有精确映射到C/C/C++/C代码。 代码在内存中创建一个保留位置,将val推入其中(1a是十六进制的),然后将其从内存中删除。它做了很多在“背景”中发生的事情,而更高级的语言对你来说是隐藏的

将%rbp推送到堆栈上:

push   %rbp
pop    %rbp
将内存中位于%rbp的内容移动到%rsp:

mov    %rsp,%rbp
xor是一个逻辑运算,答案是0。这将初始化内存,就像您显式执行
intjoe=0
,这是c中int的默认值。为什么不将0移动到var中?可能是因为xor比将值移动到内存中的某个位置更快:

xor    %eax,%eax
将1a(十六进制)的值移动/加载到rdp中

从堆栈中删除rbp:

push   %rbp
pop    %rbp
出口:


它创建一个值为26的局部变量(在函数的堆栈帧上),然后返回。与C代码中的内容完全相同。@DanielKamilKozar-您介意写一个答案,详细解释一下吗?非常感谢。1a是26的值吗?你能逐行详细解释一下吗?我会非常感激的!这并不能解释
-0x4(%rbp)
的作用,也不能解释
retq
的工作原理。本质上,您已经对从OP复制的一些代码进行了注释-这不是答案。@user3728501是的,它是,在提问者理解的水平上。事实上,我开始解释搬家的事,但我觉得这是一个离题的话题question@user3791372也许你应该解决EOF的问题这个答案的问题不在于它没有“下降到电子/晶体管水平”,而是其中只有一句话毫无疑问是正确的,这句话很琐碎。
retq