-5

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

 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
4

3 回答 3

3

一个非常基本的汇编语言入门

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

其次,汇编语言指令的种类很少

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

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

有了上述基本了解,您可能可以开始进入处理器的说明手册并更了解这一切。

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

然后可能是像这 8 页介绍性课程笔记(pdf)这样的文件

最后要注意的是:直接查看代码并试图弄清楚它的作用是理解汇编语言的一种非常有效的方法。但是我注意到您的原始帖子(在 pastebin 上)提到了反汇编程序;请注意,有时反汇编程序可能会感到困惑(例如,当它们处理包含代码的数据区域时)并产生非常不明智的指令列表。此外,通过阅读真正的源代码(而不是通过反汇编产生的源代码),您可以从作者的评论和良好的标签名称中受益,这对理解逻辑很有帮助。

于 2013-03-10T03:09:36.097 回答
1

这是一本非常适合您的书:

计算机系统:程序员的视角

于 2013-03-10T02:42:08.557 回答
1

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

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

于 2013-03-10T02:44:35.193 回答