linux下使用masm通过dosemu及freedos

这学期开的有<微机原理与接口技术>这门课,前一半基本上都是讲汇编语言程序设计的,而不管是老师及书本上讲的,还有上机时所使用的环境,都是使用masm汇编器。前面那么长一段时间,我都是打定主意用最适合Linux的方式来解决一切问题的,所以想同时另学使用GAS汇编器的at&t风格的汇编,但是发现至少在短期内这样的做法不太现实。比如一句mov ds:[0020h],bx的改写我就花了几天的时间搜索,上论坛但还是没有解决,无论什么程序只要我使用了内存操作数运行起来必出段错误,至于究竟是实模式与保护模式的处理方式不同还是什么其它原因仍是不清楚。在这样的状况下我的课掉了不少了,不能再这样下去了,先得把这学期的考试过了再说。
于是今天我想在Linux下实现用masm汇编器来写程序。有句话很有道理:Linux的好处就是,只要有人可能用得到的,就必定有人会开发出相应的解决方案。
很快我就找到了方法,那即是通过dosemu。它的功能即实现在Linux下的dos,至于dos的版本你可以自己选择吧,我的选择是GPL到底--用freedos,据称能完美兼容MS-DOS,嗯至少我小用了一段没发现有什么不同的地方。我是用rpm包安装的,直接dosemu-1.4.0-1.i386.rpm,下载链接是

http://dosemu.sourceforge.net/stable/

在这个包里包含了dosemu以及freedos和自带debug。省心省事。
$su root
$rpm -ivh dosemu-1.4.0-1.i386.rpm
将软件安装好,就可以使用dosemu命令唤出dos了
如果想shell关闭的时候dos窗口仍在,可以把/usr/bin里对应的dosemu.bin改改权限然后用xdosemu启动就好了。


如果想直接在当前shell里面运行它使用dosemu -dump就行了



想从dosemu里面退出的命令是exitemu

这时我们的dos已经安装完成。在你的用户根目录下会出现一个名为.dosemu的隐藏文件夹,里面是一些相关的配置与虚拟的磁盘驱动器,你可以根据需要更改与配置。关于提示找不到/mnt/cdrom的error,可以在配置文件autoexec.bat里将lredir e: linux\fs/media/cdrom c这一行去掉就行了。

然后我下载了masm 5.0,下载链接是

http://www.pudn.com/dl.asp?id=139573

解压后把写汇编所需要的masm.exe , link.exe复制到~/.dosemu/drives/d/bin/里,然后就可以直接使用这两个命令来编译和连接我们的Intel风格的.asm文件了,与windows下的体验完全一样!至于edit.com,我不想用它--有强大的VIM嘛且freedos里也自带了,debug.exe用不上,一是dosemu自带了有debug,二是这个debug.exe也不支持freedos。

另外为防不时之需,可用
$_ems = (4096) 或$_xms=(4096)将Dos扩展程序内存大小


终于可以和同学们一样的学微机原理了,at&t的语法我也不会放弃,以后有时间了再捡起来。
原文地址:https://www.cnblogs.com/mazhuang/p/1641666.html