我正处于学习汇编语言的规划阶段,我想从x86汇编语言开始,但我周围有配备64位处理器(i7、i5和Core2 Duo)和操作系统的计算机。由于我使用现有的机器进行工作,并且不想在学习/练习时出错,我一直计划购买或使用一些我可能找到的旧硬件来构建一个廉价的32位系统。但在此之前,我想知道是否可以使用虚拟机来实现相同的目的。执行的机器指令是否仅限于虚拟机,或者它们是否与虚拟机的主机(即我的计算机本身)交互?
我环顾四周,看看是否有人已经尝试过这样的事情,但似乎没有人-所以,如果我的问题是天真的,我道歉,因为我对汇编一无所知。但如果有人能在这个主题上提供一些启发,并为像我这样想在安全和隔离的环境中学习汇编的人提供一些指导,那就太好了。
发布于 2012-10-23 08:10:51
我强烈建议:
1)使用指令集模拟器(与您所要求的相同)。更好的知名度和更好的成功机会,更少的挫折,更少的放弃机会。
2)不要先学习x86组装。(拥有硬件是首先学习x86的一个糟糕的借口)。非常糟糕的体系结构,首先学习一个好的体系结构,如果你费心学习x86,以后再学习它,然后使用众多模拟器/仿真器中的一个首先学习8088/86。
3)学习一些指令集,如果你从一个好的指令集开始,那么所有其他的指令集甚至编程语言都是语法上的小问题。
4)你不是在学习系统调用,这是一个学习汇编的坏方法,学习指令集以及如何使用它进行编程,系统调用是在你学习了汇编并选择继续在其中编写应用程序之后。
msp430 (或pdp11/lsi11)、arm、thumb、avr、mico8和一系列其他的工具要好得多。将mips留到学习了几个之后,它有一些不常见的功能,可能会让您对其他体系结构产生错误的心态。
如果你的编程技能已经很强,那么你可以在几天内学会汇编,并在几周内拥有几到多个指令集。如果你遵循这个指南,学习了一些(彼此)不相关的(好的)指令集,然后开始研究x86,你就会明白为什么我建议你要么最后学,要么永远不学。像6502、pic和其他一些软件一样,它具有历史教育价值,但由于家族历史的性质,从调优/编程的角度来看,你不能从中获得太多东西。实际上,我推荐阅读汇编语言的禅宗,并记住即使在写的时候,它也是关于如何在一般情况下考虑性能编码,而不是关于8088/86性能调优。
真正学习汇编的一个好方法是写一个反汇编程序,问题是大多数指令集都是可变字长的,而可变字长的反汇编程序是一个高级编程问题。ARM和thumb (不是thumb2)是固定的字长,并且很容易为其编写反汇编程序。
发布于 2012-10-23 07:33:57
首先使用qemu。它是一个轻量级的虚拟机,您可以在上面运行程序(原始程序集、c、c++等),甚至不需要在上面安装操作系统。
发布于 2012-10-23 07:34:09
是的,您可以在虚拟机中进行汇编编程,并且您将受到虚拟机公开的指令集的限制。如果您在64位主机环境中运行32位计算机,您将只看到32位指令。
无论如何,汇编编程在您的主机环境中并不是“不安全”的,所以实际上没有必要使用VM,除非您希望完全模拟不同的硬件,或者希望编写引导加载程序和微型操作系统之类的东西。
不过,仅仅为了学习汇编,我肯定不会开始编写引导加载程序/操作系统,因为您将无法访问调试器,并且测试周期将会很长。从http://www.nasm.us/开始学习x86/x86-64汇编,或者研究http://wiki.qemu.org/Main_Page来做类似ARM编程的事情。
https://stackoverflow.com/questions/13021466
复制相似问题