Assembly 使用虚拟机学习装配

Assembly 使用虚拟机学习装配,assembly,Assembly,我正处于学习汇编语言的计划阶段,希望开始学习x86汇编语言,但我身边的计算机都有64位处理器(i7、i5和Core2Duo)和操作系统。由于我使用现有的机器工作,不想在学习/练习时出错,所以我一直计划购买或使用我可能找到的一些旧硬件构建一个便宜的32位系统。但在此之前,我想知道是否有可能使用虚拟机实现同样的目的。执行的机器指令是否仅限于虚拟机,或者它们是否与虚拟机的主机(即我的计算机本身)交互 我环顾四周,看看是否有人已经尝试过这样的事情,但似乎没有人尝试过——所以,如果我的问题很幼稚,我表示歉

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


我环顾四周,看看是否有人已经尝试过这样的事情,但似乎没有人尝试过——所以,如果我的问题很幼稚,我表示歉意,因为我对组装一无所知。但如果有人能对这一主题有所了解,并为像我这样希望在安全和隔离的环境中学习汇编的人提供一些指导,那就太好了。

从使用开始。它是一个轻量级的虚拟机,可以在没有安装OS的情况下运行程序(原始汇编、C、C++等)。

< P>是的,你可以在虚拟机内进行汇编编程,而你将受限于虚拟机所暴露的指令集。如果在64位主机环境中运行32位计算机,则只能看到32位指令

值得一提的是,汇编编程在主机环境中并不是“不安全”的,所以实际上不需要使用VM,除非您希望完全模拟不同的硬件,或者希望编写引导加载程序和微型操作系统之类的东西

不过,就学习汇编而言,我肯定不会开始编写引导加载程序/操作系统,因为您将无法访问调试器,而且测试周期将很长。从开始学习x86/x86-64汇编,或研究如何进行ARM编程。

我强烈建议:

1)使用指令集模拟器(与你所要求的一致)。更好的可视性和成功的机会,更少的挫折,更少的放弃机会

2) 不要先学习x86汇编。(拥有硬件是先学习x86的糟糕借口)。非常糟糕的体系结构,先学习一个好的体系结构,如果您想学习x86,请稍后再学习,然后使用众多模拟器/仿真器中的一个先学习8088/86

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

4) 学习系统调用不是学习汇编、学习指令集以及如何使用它编程的好方法,系统调用是在学习汇编并选择继续在其中编程应用程序之后进行的

msp430(或pdp11/lsi11)、arm、thumb、avr、mico8和一系列其他设备都要好得多。保存mips,以便在您也学习了一些之后,它具有一些不同寻常的特性,这些特性可能会使您对其他体系结构抱有错误的想法

如果您的编程技能已经很强,那么您可以在几天内学会汇编,并在几周内拥有几到多个指令集。如果您按照本指南学习一些不相关的(彼此相关的)(好的)指令集,那么开始看看x86,您就会明白为什么我建议您最后学习或永远不要学习它。与6502、pic和其他一些产品一样,它具有历史教育价值,但由于家族历史的性质,从调优/编程的角度看,您无法从中获得太多。实际上,我建议阅读汇编的Zen,并且记住,即使在编写时,它也是关于如何考虑总体性能编码的,而不是关于8088/86性能调优的

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

试试看

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


如果您正试图学习与Arm体系结构相关的汇编语言,那么我的建议是从以下站点学习基础知识 组件及其最佳开始位置


因此,从上面的站点,你可以在像
qemu
这样的虚拟机上试用,而不需要
真正的硬件

谢谢,hexist。好吧,编写引导加载程序和操作系统可能是以后的目标,这取决于我做得如何,但我尝试了NASM,出于某种原因,我的Windows 8(x64)似乎不喜欢它(兼容性问题)。我想运行linux的32位虚拟机可能会更好。我将尝试一下NASM和Qemu。你对NASM有什么问题?我运行NASM并在我的64位计算机上创建32位应用。@Gunner每当我尝试运行NASM时,我都会收到以下消息对话框“由于与64位版本的Windows不兼容,程序或功能“NASM.exe”无法启动或运行。请与软件供应商联系,询问是否有64位Windows兼容版本(如果可用)”。消息对话框标题为“不支持的16位应用程序”。在NASM网站上,没有显示下载是否为16/32/64位。您是从这里还是从dos目录下载的?听起来你使用的是dos版本,没有emulatorah ha,dos应用程序无法在64位系统上运行-是的,我实际上使用的是dos版本。谢谢你指出这一点!谢谢你,约瑟夫。将尝试一下。您可以使用32位代码作为64位CPU