使用虚拟机来学习组装

时间:2012-10-22 23:30:19

标签: assembly

我正处于计划阶段学习汇编语言,并希望从x86程序集开始,但我的计算机周围有64位处理器(i7,i5和Core 2 Duo)和操作系统。由于我使用现有的机器工作并且不想在学习/练习时出错,我一直计划使用我可能找到的一些旧硬件购买或构建便宜的32位系统。但在此之前,我想知道是否可以将虚拟机用于同一目的。执行的机器指令是否仅限于虚拟机,或者它们是否与虚拟机的主机(即我的计算机本身)进行交互?

我环顾四周,看看是否有人已经尝试过这样的事情,但似乎没有人这样做 - 所以,如果我的问题很天真我很抱歉,因为我对装配一无所知。但如果有人能够对这个问题有所了解并为像我这样想要在安全和孤立的环境中学习装配的人提供一些指示,那就太棒了。

5 个答案:

答案 0 :(得分:13)

我强烈建议:

1)使用指令集模拟器(与你要求的一样)。更好的能见度和更好的成功机会,更少的挫折感,更少的放弃机会。

2)不要先学习x86程序集。 (拥有硬件是首先学习x86的一个不好的借口)。非常糟糕的架构,首先要学习一个好的架构,如果你懒得学习x86以后再学习它,然后先使用众多模拟器/模拟器中的一个来学习8088/86。

3)学习一些指令集,如果从一个好的指令集开始,那么所有其他指令集甚至编程语言都只是语法的一个小问题。

4)你没有学习系统调用,这是学习汇编,学习指令集以及如何使用它进行编程的不良方法,系统调用是在你学习了汇编并选择继续编程应用程序之后。

msp430(或pdp11 / lsi11),arm,thumb,avr,mico8和其他人的列表要好得多。在你学会了一些之后保存mips,它有一些不常见的功能,可以让你对其他架构有错误的心态。

如果您的编程技能已经很强,那么您可以在几天内完成装配,并在几周内完成几个到多个指令集。如果您按照本指南学习一些无关(相互)(好)指令集,那么开始查看x86,您将看到我建议最后学习或从不学习的原因。像6502和pic以及其他一些它具有历史教育价值,但由于家族历史的性质,你无法从调整/编程的角度得到很多。实际上我建议阅读The Zen of Assembly,并记住即使在编写时它是关于如何考虑性能编码的,而不是关于8088/86性能调整。

真正学习汇编的一个好方法是编写一个反汇编程序,问题是大多数指令集都是可变字长,而可变字长反汇编程序是一个高级编程问题。 ARM和拇指(不是thumb2)是固定的字长,非常容易编写反汇编程序。

答案 1 :(得分:4)

首先使用qemu。它是一个轻量级的VM,你可以运行程序(原始程序集,c,c ++等),甚至不用安装操作系统。

答案 2 :(得分:3)

是的,您可以在虚拟机中进行汇编编程,并且您将受限于虚拟机公开的指令集。如果在64位主机环境中执行32位计算机,则只能看到32位指令。

对于它的价值,汇编编程在你的主机环境中并不“不安全”,所以除非你想要完全模拟不同的硬件,或者想要编写像bootloaders这样的东西,否则根本不需要使用VM和微小的操作系统。

虽然只是学习汇编,但我当然不会开始编写引导加载程序/操作系统,因为你无法访问调试器并且测试周期会很长。从http://www.nasm.us/开始学习x86 / x86-64程序集,或者查看http://wiki.qemu.org/Main_Page进行ARM编程等工作。

答案 3 :(得分:0)

尝试Marss86

  

MARSSx86(简称MARSS)是一个用于循环精确完整系统的工具   模拟x86-64架构,特别是多核   实现。我们的目标是创造一个简单而有效的完整   基于现有工具的系统架构仿真环境。

答案 4 :(得分:0)

如果您正在尝试学习关于Arm架构的汇编语言,那么我的建议是从以下网站学习基础知识。在这些内容中解释了to use qemu w.r.t assembly and its best place to start

http://www.bravegnu.org/gnu-eprog/index.html#intro

http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/

所以从上面的网站上你可以尝试像qemu这样的虚拟机而不需要real hardware