装配64位平台

时间:2012-02-20 20:55:10

标签: assembly

我是一名初学程序员,我想从汇编语言开始,但我要学习的只是Assembly for X86处理器系列......新的现代处理器是否熟悉?

3 个答案:

答案 0 :(得分:2)

在我看来,它实际上更好地开始使用x86 32位程序集,主要是cuse资源是如此好。你仍然会学习x64相同的基础知识,所以你不会松懈(简单来说,x86-64只是x86指令集和架构的扩展)。

任何x86-64处理器也能够运行32位程序集(至少在操作系统级别,使用WOW64之类的程序),因此您也不需要更改环境。

升级到x86-64只是一个值得注意的主要事项:

  • 更多注册
  • 呼叫约定发生重大变化(ABI,请参阅System V和AMD64 ABI for x64)
  • 系统调用的更改方式
  • 更多地址空间
  • RIP寻址
  • 除了GS& FS
  • 强制64位寻址的REX.W前缀

还有其他一些快速变化,但这些变化可以从英特尔或AMD系统架构手册中获得,这些手册对32和32都是很好的资源。 64位开发。

使用“现代处理器”时,大多数台式机和笔记本电脑处理器都是基于x86的,所有处理器都是64位和32位兼容,你不需要真正担心你学到的程序集是否适用于现代处理器,因为它会。只有在使用SSE和AXV等扩展时,才能提出这些问题,这些扩展可能包含特定于供应商的指令,或者您需要使用非x86系列处理器(如ARM或SPARC)。

答案 1 :(得分:2)

这是相当主观的。 x86架构没有什么问题。它取得了巨大的成功,您可以轻松找到汇编程序,调试器,模拟器和书籍。您必须对选择的特定版本有所选择,x86内核可以运行16位,32位和64位代码。证明它的长寿。你为每个编写了非常不同的汇编代码。很容易陷入今年在印度流行的16位模式,但由于16位操作系统是博物馆的工件,因此非常无关紧要。

但最终并不重要。当你掌握一种特殊的装配时,你就会知道如何处理所有其他装配。您需要几个月的时间来完成第一个。下一个需要几个星期。

这里唯一实用的教训是 有点浪费你的时间。实际上没有人再写机器代码了。为现代核心编写快速代码非常困难,因为核心实际上并不直接执行汇编代码。它有一个内置硬件的编译器,可将机器代码转换为芯片内置本机执行引擎的微操作指令。其中 way 寄存器比x86支持更多,具有多个功能单元,允许并行执行指令并具有缓存以减少访问内存的延迟。

需要一台机器来生成优化nderlying硬件的神秘规则的代码。和软件一样,嵌入在C编译器的代码生成阶段。

答案 2 :(得分:0)

我强烈反对你学习x86程序集作为你的第一个程序集,这是一个非常难看的指令集,原因有很多。

我有许多指令集模拟器http://github.com/dwelch67

thumbulator,thumb是ARM指令集的一个子集,它是目前最便携的arm指令集(几乎适用于所有ARM内核)。正交,直截了当等不是坏的第一指令集。

msp430sim我想我称它是一个msp430模拟器,一个漂亮而简单的指令集,非常干净,非常简单。一个好的第一指令集。

我有avriss的avr模拟器并没有经过充分测试,所以请远离一段时间。不是一个糟糕的指令集,msp430可能是最好的,然后是avr。

我有自己的指令集lsasim,它是为学习汇编程序而制作的。并有一个你可以尝试的教程。

如果你真的觉得你必须首先学习x86,我强烈建议你回到英特尔的根源,从8088/8086开始。我已经分叉了pcemu模拟器并且删除了bios调用,因此它只是一个指令集模拟器,学习asm的原因,学习指令,如果你想学习bios调用你应该首先学习汇编语言,bios稍后打电话。

最近我在opencores中添加了一个琥珀色arm2处理器的分叉。我让它在verilator中运行,这对你来说意味着你可以在不需要任何硬件或任何昂贵的模拟器的情况下运行它,它适用于所有免费工具。 arm2是当今广泛使用的ARM系列处理器的先行者。通过学习arm2指令集,如果你采用这条路径将为当前的arm系列建立一个坚实的基础,除了它不是一个坏的指令集,比x86好多了,但有很多指令和很多方法来使用每个指令所以可以起初很笨拙。

琥珀/手臂和拇指缩放器与gcc交叉编译器配合使用,例如,可以轻松获得。 msp430和avr你可以找到gcc衍生品,或者按照他们的指示建立自己的。

如果你根本没有编程技巧,我建议你从学习python开始艰难的教程。这并不难。困难的部分就是做他告诉你做的事情,不要打它,只需输入并运行它,然后找出它做了什么。一旦你有一些基本的编程技巧花了半个小时左右的lsasim教程,你就可以了解一些基础知识。然后去其他一个msp430或拇指,然后手臂然后x86。如果你首先尝试一些,理智的指令集,x86将有点微不足道,如果你首先尝试x86它将是痛苦的,你将不得不重新学习一些基础知识转移到其他指令集。仅仅因为你有x86硬件并不意味着你应该尝试使用它来学习。这也是一个艰难的开始。如果你想查看正在发生的事情,你可以使用模拟器。 Esp带有琥珀色的arm2核心。一旦你知道汇编,虽然每种编程语言,汇编或其他,只是语法问题......