于是今天我想在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的语法我也不会放弃,以后有时间了再捡起来。