学习汇编语言

时间:2013-03-10 02:35:42

标签: linux assembly att

我正在尝试学习汇编语言,但我需要帮助学习每个命令的目的。以下是使用它们的程序。

 push   %ebp
 mov    %esp,%ebp
 sub    $0x10,%esp
 mov    0x8(%ebp),%eax
 add    $0x1,%eax
 mov    %eax,-0x4(%ebp)
 mov    -0x4(%ebp),%eax
 leave  
 ret

3 个答案:

答案 0 :(得分:3)

非常基本的汇编语言入门

首先,您应该知道汇编语言与特定处理器(CPU)或处理器系列相关。例如,问题中显示的代码段似乎是针对Intel x86架构的。这很重要,因为很多汇编语言指令依据或基于CPU寄存器的内容。因此,在深入研究各个指令的细节之前,您应该熟悉 CPU的架构,即可用寄存器的名称和特征以及它们的作用(这些寄存器中的一些本质上是通用的但是其他人有非常具体的角色)。该架构的另一部分是外部存储器位置的处理方式。

其次,只有极少数汇编语言指令

  • 流量控制指令(测试,跳转,返回[来自子程序]等)
  • 数据复制指令(将内存内容移入/移出注册表和/或内存)
  • 堆栈管理指令(这些是一种特殊的数据复制指令,它也作用于指定SP的堆栈指针,一个特殊的寄存器)。
  • 算术指令(加,减,乘等)
  • 布尔运算(shift [寄存器内容],按位和,按位或等)

第三,有时会使事情变得更复杂的事情(以及使汇编逻辑非常强大的因素)是寻址模式。基本上寻址模式用于确定将用于给定指令的存储器位置。寻址模式的示例是直接和间接的,其中前者提供直接读/写的地址作为指令的操作数,后者也提供存储器地址操作数,但是获得用于读/写的有效地址。首先阅读所提供地址的内容,并将该内容用作应进行操作的地址。

基于上述基本理解,您可以开始进入处理器的使用说明书,并更加了解它。

也许从以下维基百科条目开始:

然后可能是像this 8 pages introductory course notes(pdf)

这样的文件

最后一点需要注意:直接查看代码并尝试计算代码是一种非常有效的方法来理解汇编语言。但是我注意到你的原始帖子(在pastebin上)引用了一个反汇编程序;请注意,有时反汇编程序会混淆(例如,当它们处理包含代码的数据区域时)并产生非常不合理的指令列表。此外,通过阅读真实的源代码(而不是通过反汇编产生的源代码),您可以从作者的评论和良好的标签名称中受益,这有助于理解逻辑。

答案 1 :(得分:1)

这是一本非常好的书,用于你的目的:

Computer Systems: A Programmer's Perspective

答案 2 :(得分:1)

只需快速搜索即可获得x86汇编语言的以下参考资料

为什么你想学习汇编语言是另一回事!