Assembly 参加组装课程,卡在DOS中!

Assembly 参加组装课程,卡在DOS中!,assembly,dos,masm,Assembly,Dos,Masm,我正在修一门微处理器编程课程,作为我电子工程学位的一部分。不幸的是,在实验室中,我们必须使用MASM在DOS中工作 现在,我真的不觉得DOS是一个障碍,但我只是在家里的电脑上没有DOS(我所有的电脑都没有软盘驱动器),所以我无法练习编写程序。我曾在Windows下尝试过,但它无法组装(我猜这是因为受保护模式) 我该怎么做有什么建议吗?我应该学习在保护模式下编程吗?这对我的课程有帮助吗?本课程的重点是8086 也许虚拟机能帮上忙?如果是这样,我在哪里可以得到DOS和MASM呢?我会研究运行Sun(

我正在修一门微处理器编程课程,作为我电子工程学位的一部分。不幸的是,在实验室中,我们必须使用MASM在DOS中工作

现在,我真的不觉得DOS是一个障碍,但我只是在家里的电脑上没有DOS(我所有的电脑都没有软盘驱动器),所以我无法练习编写程序。我曾在Windows下尝试过,但它无法组装(我猜这是因为受保护模式)

我该怎么做有什么建议吗?我应该学习在保护模式下编程吗?这对我的课程有帮助吗?本课程的重点是8086


也许虚拟机能帮上忙?如果是这样,我在哪里可以得到DOS和MASM呢?

我会研究运行Sun(免费)在任何平台(Windows、Mac、Linux等)上运行DOS虚拟机。

如果从“开始”菜单中键入
COMMMAND而不是
CMD
,然后选择run,你将在DOS中运行。

虚拟机就可以了。我敢肯定,如果你的学术机构提供访问权限,那么你可以在MSDNAA上免费获得DOS。如果您使用的是Windows,我建议使用Microsoft虚拟PC for DOS虚拟机。虽然我个人更喜欢VMware作为VM主机,特别是对于DOS,但虚拟PC在模拟方面似乎做得更好。

FreeDOS是另一种选择,在virtualbox中运行它

顺便说一句,免费DOS也可以从CD启动。我想如果你愿意的话,你甚至可以把它安装在一个拇指驱动器上。

我使用了这个模拟器,而如果你只需要基本的dos,再加上免费的dos是非常好的。

在汇编程序中编写Perl子例程

概要

   print "9 + 16 = ", add(9, 16), "\n";
   print "9 - 16 = ", subtract(9, 16), "\n";

   use Inline ASM => 'DATA', 
              AS => 'as',
              PROTO => {add => 'int(int,int)'};

   use Inline ASM => 'DATA',
              AS => 'nasm',
              ASFLAGS => '-f elf',
              PROTO => {subtract => 'int(int,int)'};

   __END__
   __ASM__

   .text
   .globl    add

   add:      movl 4(%esp),%eax
             addl 8(%esp),%eax
             ret
   __ASM__
             GLOBAL subtract
             SECTION .text

   subtract: mov eax,[esp+4]
             sub eax,[esp+8]
             ret

我建议使用免费的虚拟机,或者x86(+其他)仿真器。我建议使用MS-DOS作为来宾操作系统,因为我以前尝试在VirtualBox下的FreeDOS下进行一些基本组装是不可靠的

可从Microsoft下载,但我不记得是否包含16位汇编程序。还可以阅读Randall Hyde关于MASM的文章。该网站是学习组装的好去处。当然,维基百科也有自己的特色。您需要一个与MASM兼容并在DOS下运行的(即16位)


添加说明:Windows XP之前的MS Windows旧版本包括MS-DOS,包括Windows 95和98。如果您有或可以在CD上找到一个旧拷贝,否则,如果有,人们可能会免费赠送CD—询问朋友、本地计算机商店、家人,您应该能够毫不费力地将其安装到虚拟机中。

VMWare也可以。只需找到DOS映像(.iso或软盘)并将其安装到VMWare上即可。你可以用它做任何你想做的事情,而不会对你的主机造成任何伤害。如果需要,您甚至可以使用int13中断;)。 哦,我怀念在我的i386上,在DOS下挂接中断子程序的“常驻”应用程序的日子:)


祝你好运,享受asm带来的乐趣。

使用这些链接,你将获得如何开始的提示。而且很有趣。它与旧软件的兼容性如何?喜欢例如俄罗斯方块?我强烈建议不要为了学习而这样做。在虚拟8086模式下运行有很多怪癖,可能会误导学习者,特别是在汇编语言级别上——而且x64上无论如何都不可用。我同意Mahrdad Afshari的观点,它不提供16位环境,而masm32用于32位(保护模式)环境,这与萨阿德在学校的指导非常不同。如果你运行的是64位Windows7,你可以下载WindowsXP模式,这将允许你这样做。我并不反对虚拟机,但如果他必须这么做,那么我会选择带FreeDos的Sun VirtualBox。为了对汇编语言有一点了解,最好关注8086。80386和更高版本(奔腾等)需要更多关于内存管理的知识,并且主要使用较大的寄存器(32或64位而不是8或16位)。有很多仿真器(见下面的答案)。@Roalt:这个建议很荒谬,简单本身并不意味着放弃实用知识。
ax bx cx dx
16位寄存器都包含在386+中,没有人被迫处于保护模式。16位realmode的现代x86处理器非常简单。你从基础开始,慢慢地融入附加功能。我还没有真正尝试过FreeDOS,也不能说任何关于兼容性的事情。我高度怀疑它是否100%兼容MS-DOS的所有bug。与任何软件的100%兼容性几乎是不可能实现的。FreeDOS是非常兼容的。我不希望有太多人发现导致实际问题的差异。如果是这样的话,它也应该起作用。获取实际的MSDO也不难。无论如何,虚拟机是一条必由之路。NTVDM绝对不是。一般来说,我能够在FreeDOS中运行所有东西,没有太多问题。MSDO确实包含特性,如果有人专门为其编码,则可能会出现问题。所以,如果你遵循“理智”的编码实践,你会没事的。我想知道DosBox会怎么样。。。它面向运行旧的DOS游戏,但我知道我已经让它运行了一些真正古老的GW-BASIC程序,这些程序是我在93年和94年写的
qemu
通常已经取代了
bochs
,它还拥有成熟的虚拟化支持。