8

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

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

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

也许虚拟机可以提供帮助?如果是这样,我在哪里可以获得 DOS 和 MASM?

4

8 回答 8

8

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

http://www.freedos.org/

顺便说一句,Free DOS 也可以从 CD 启动。如果愿意,我认为您甚至可以将其安装在拇指驱动器上。

于 2010-02-08T20:40:30.487 回答
5

我建议使用虚拟机,例如免费的VirtualBoxqemu,一个 x86(+ 其他)模拟器。我建议使用 MS-DOS 作为客户操作系统,因为我之前尝试在 VirtualBox 下的 FreeDOS 下尝试一些基本程序集是不可靠的。

MASM v8可从 Microsoft 下载 - 但我不记得它是否包含 16 位汇编程序。另请阅读 Randall Hyde关于MASM 的简介。装配艺术网站是学习装配的首选之地。当然 Wikipedia 有汇编程序的比较。您将需要一个兼容 MASM 并在 DOS(即 16 位)下运行的软件。

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

于 2010-02-08T20:51:18.977 回答
3

我会考虑运行 Sun 的VirtualBox(免费)以在任何平台(Windows、Mac、Linux...)上运行 DOS VM

于 2010-02-08T20:39:16.830 回答
2

如果您只需要基本的dos,我使用了这个模拟器bochs,而与免费dos一起使用非常好

于 2010-02-08T20:44:49.400 回答
1

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

于 2010-02-08T20:39:36.047 回答
0

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

祝你好运,玩得开心。

于 2010-02-08T21:42:23.497 回答
0

如果您键入COMMMAND而不是CMD从开始菜单中选择运行,您将进入 DOS。

于 2010-02-08T20:39:25.590 回答
0

Inline::ASM - 在汇编器中编写 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
于 2010-02-08T20:44:58.923 回答