使用虚拟机来学习组装

Zis*_*han 7 assembly

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

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

old*_*mer 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)是固定的字长,非常容易编写反汇编程序.


Jos*_*phH 6

从使用qemu开始。它是一个轻量级 VM,您甚至可以在其上运行程序(原始程序集、c、c++ 等),甚至无需在其上安装操作系统。