装配基础知识(使用NASM)

时间:2016-06-02 19:26:22

标签: assembly nasm

我对C / C ++有一个很好的理解,但我想扩展我的武器库,因此我决定学习汇编...它只是我喜欢可以编译的低级语言(我不喜欢python和东西.. 。 没有恶意)。 无论如何,我有一些与大会有关的问题。我搜索了很长时间但显然,所有资源都已经过时了。所以,这里是: -

  1. 学习汇编的首选操作系统是什么? Windows还是Linux?
  2. 我决定使用NASM因为我喜欢它的语法与其他人相比。我不是真正的宏粉丝,我想学习裸机基础知识。我不明白的是: 在Windows中,我必须使用push和pop等,而在Linux中,我可以使用mov和access寄存器吗?我真的更喜欢后一种方法,因此这是操作系统选择的一个重要考虑因素。另外,Windows中的Assembly没有相当数量的学习材料,所以它很混乱。特别是因为我希望启动64位架构。
  3. 我不打算使用MASM或FASM,因为两者都是基于宏的,我对NASM语法感到满意。
  4. 最后,有人可以向我推荐一些免费的电子书或指南来学习大会吗?如果Linux或Windows也没关系,因为我也可以使用Linux的虚拟盒。
  5. 感谢您的帮助:)

    最诚挚的问候,

    Electrux

2 个答案:

答案 0 :(得分:0)

  1. 装配说明通常是基于芯片架构而非平台特定的。话虽这么说,平台可以定义函数调用接口标准(基于寄存器,基于堆栈,混合)。所以Linux将与Mac OSX不同(这只是Sys V约定的一个传统)。
  2. NASM很好,但宏是你的朋友。我也首先学习了基础知识,现在我很高兴在生成可重复的结构时使用宏来节省我的工作量。
  3. 作为#2的一部分,pushpopmov变量是基于英特尔和AMD的指令,每个指令都有其目的且不相互排斥。其他芯片架构也有类似之处(例如ARM等)。
  4. 如果你是Dosboxing这个,请在​​google中找到任何x86或x86_64引用,你会发现一大堆信息丰富且有启发性的资源。

答案 1 :(得分:0)

  

哪个是学习汇编的首选操作系统? Windows还是Linux?

我在使用Assembly时只使用过Linux。你也可以用Windows来做,但Linux不那么痛苦。

  

在Windows中,我必须使用push和pop等,而在Linux中,我可以使用mov和access寄存器吗?我真的更喜欢后一种方法,因此这是操作系统选择的一个重要考虑因素。

推送和弹出处理堆栈中的东西,mov主要处理寄存器。无论操作系统如何,都使用它们。程序集的类型与处理器体系结构(它使用的指令)有关,而与操作系统本身无关。

  

最后,有人可以向我推荐一些免费的电子书或指南来学习汇编吗?如果Linux或Windows也不重要,因为我也可以使用Linux的虚拟盒。

Here's a link to the book I used throughout my University course.

祝你好运!