学习王爽《汇编语言》时,书中使用的是Debug.exe和Masm5.0进行实验。由于大家的电脑大多使用的是64位的操作系统,不能在系统自带的MS-DOS环境下编写汇编源程序,而每次都开虚拟机也相对较麻烦,所以为大家提供DOSBox这个软件,帮助大家在64位环境下编写汇编源程序。
DOSBox 是一个 DOS 模拟程序,由于它采用的是 SDL 库,所以可以很方便的移植到其他的平台。目前,DOSBox 已经支持在 Windows、Linux、Mac OS X、BeOS、palmOS、Android、webOS、os/2等系统中运行。
官方网址:http://www.dosbox.com/
DOSBox官网下载地址:https://www.dosbox.com/download.php?main=1
使用教程:https://www.dosbox.com/wiki/Basic_Setup_and_Installation_of_DosBox
安装:双击即可完成
卸载:双击安装路径D:\Program Files (x86)\DOSBox-0.74中的uninstall.exe即可
Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。
debug功能在win7之后系统已经不自带了,即64位系统是不能直接在命令行操作中输入debug来进行相关操作的。
把debug.exe、edit.com、DOSXNT.EXE放在本机磁盘的某目录,如 "D:\MASM5\";
运行DOSBox,输入 debug 并回车
提示: Illegal command:debug. (非法命令:debug)
输入 mount c d:\MASM5 并回车
提示 Drive C is mounted as local directory d:\MASM5\
再输入 c: 并回车
盘符由Z:改为C:,再输入debug并回车,则可以进行debug调试了。
注意:debug.exe程序必需存在于"D:\MASM5\"目录
mount命令格式如下:
Z:\>MOUNT C C:\OLDGAMES
Drive C mounted as local directory C:\OLDGAMES\
驱动器C安装为本地目录C:\oldgames\
mount:通知程序装入目录
C:告诉程序你希望新驱动器的名称(保留为C:很好)
C:\oldgames:这是我要设置为dosbox的新驱动器的目录,因为我所有的游戏都在其中。如果创建了不同的目录,请写入创建的目录。
(注意:如果要装入CD-ROM而不是文件夹,请键入:
Z:\>MOUNT D D:\ -t cdrom
MSCDEX installed.
Drive D is mounted as CDRom D:\
每次调试程序时,都要先mount一下,比较麻烦。
依次 开始 -> 所有程序 -> DOSBOX-0.74 -> OPTIONS -> DOSBOX 0.74 OPTIONS (dosbox.conf)
在最后输入下面两行命令,保存关闭
mount C: D:\MASM5
c:
重新运行DOSBox,则会自动加载指定的目录;
debug 1.exe
可以用任意的文本编辑器来编辑源程序,只要最终将其存储为纯文本文件即可。
edit.com 是WINDOWS自带的MS-DOS应用程序,它的作用是编辑所有的文本文件,以及用记事本作为编辑器的程序。功能类似于记事本。
位于:C:\WINDOWS\system32
在“C:\>”提示符后输入edit,回车
注意:
1.edit.com程序必需存在于"D:\MASM5\"目录;
2.文件保存位置为 C:\ ,实际保存在 D:\MASM5\ 中
mount C: D:\MASM5
输入汇编代码:
assume cs:codesg
codesg segment
mov ax,0123h
mov bx,0456h
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends
end
File -> Save As… 弹出另存为对话框
在 File Name: 后面输入 1.asm,点击OK按钮
程序将被保存在1.asm文件中,实际也就是D:\MASM5文件夹中
对 *.asm文件进行编译,生成包含机器代码的目标文件(.obj文件)。
采用微软的masm5.0汇编编译器,文件名为masm.exe
在“C:\>”提示符后输入masm,回车
注意:
1.MASM.exe程序必需存在于"D:\MASM5\"目录;
2.需要DOSXNT.EXE程序,否则可能会出错;
提示输入将要被编译的源文件的名称。
注意:
“[.ASM]”提示我们,默认的文件扩展名是asm,比如,要编译的源程序文件名是“p1.asm”,只要在这里输入“p1”即可。可如果源程序文件不是以asm为扩展名的话,就要输入它的全名。比如源程序文件名为“p1.txt”,就要输入全名。
在输入源程序文件名的时候一定要指明它所在的路径。如果文件就在当前路径下,只输入文件名就可以,可如果文件在其他的目录中,则要输入路径,比如,要编译的文件p1.txt在“c:\windows\desktop”下,则要输入“c:\windows\desktop\p1.txt”。这里,我们要编译的文件是C盘根目录下的1.asm,所以此处输入“c:\1.asm”。
输入要编译的源程序文件名后(1.asm),按Enter键,屏幕显示如下图所示。
在输入源程序文件名后,程序继续提示我们输入要编译出的目标文件的名称,目标文件是我们对一个源程序进行编译要得到的最终结果。注意屏幕上的显示:“[1.OBJ]”,因为我们已经输入了源程序文件名为1.asm,则编译程序默认要输出的目标文件名为1.obj,所以可以不必再另行指定文件名。直接按Enter键,编译程序将在当前的目录下,生成1.obj文件。
这里,也可以指定生成的目标文件所在的目录,比如,想让编译程序在“c:\windows\desktop”下生成目标文件1.obj,则可输入“c:\windows\desktop\1”。这里我们直接按Enter键,使用编译程序设定的目标文件名。
确定了目标文件的名称后,屏幕显示如下图所示。
编译程序提示输入列表文件的名称,这个文件是编译器将源程序编译为目标文件的过程中产生的中间结果。可以让编译器不生成这个文件,直接按Enter键即可。
忽略了列表文件的生成后,屏幕显示如下图所示。
编译程序提示输入交叉引用文件的名称,这个文件同列表文件一样,是编译器将源程序编译为目标文件过程中产生的中间结果。可以让编译器不生成这个文件,直接按.Enter键即可。
忽略了交叉引用文件的生成后,屏幕显示如下图所示。
对源程序的编译结束,编译器输出的最后两行告诉我们这个源程序没有警告错误和必须要改正的错误。
按照上面的过程进行了编译之后,在编泽器masm.exe运行的目录D:\masm下(即当前路径下),将出现一个新的文件:1.obj,这是对源程序1.asm进行编译所得到的结果。
注意,在编译的过程中,我们提供了一个输入,即源程序文件。最多可以得到3个输出:目标文件(.obj)、列表文件(.lst)、交叉引用文件(.crf),这3个输出文件中,目标文件是我们最终要得到的结果,而另外两个只是中间结果,可以让编译器忽略对它们的生成。
对 *.obj目标文件进行连接,得到可执行文件(.exe文件)。
采用微软的Overlay Linker3.60连接器,文件名为LINK.EXE
在“C:\>”提示符后输入link,回车
注意:LINK.EXE程序必需存在于"D:\MASM5\"目录;
运行link后,首先显示一些版本信息,然后提示输入将要被连接的目标文件的名称。
注意,“[.OBJ]”提示我们,默认的文件扩展名是obj,比如要连接的目标文件名是“p1.obj”,只要在这里输入“pl”即可。可如果文件不是以obj为扩展名,就要输入它的全名。比如目标文件名为“p1.bin”,就要输入全名。
在输入目标文件名的时候,要注意指明它所在的路径。这里,要连接的文件是当前目录下的1.obj,所以此处输入“1”。
输入要连接的目标文件名后,按Enter键,屏幕显示如下图所示。
在输入目标文件名后,程序继续提示我们输入要生成的可执行文件的名称,可执行文件是我们对一个程序进行连接要得到的最终结果。注意屏幕上的显示:“[1.EXE]”,因为已经确定了源程序文件名为1.obj,则程序默认要输出的可执行文件名为1.EXE,所以可以不必再另行指定文件名。直接按Enter键,编译程序将在当前的目录下,生成1.EXE文件。
这里,也可以指定生成的可执行文件所在的目录,比如,想让连接程序在“c:\windows\desktop”下生成可执行文件 1.EXE,则可输入“c:\windows\desktop\1”。我们直接按Enter键,使用连接程序设定的可执行文件名。
确定了可执行文件的名称后,屏幕显示如下图所示。
连接程序提示输入映像文件的名称,这个文件是连接程序将目标文件连接为可执行文件过程中产生的中间结果,可以让连接程序不生成这个文件,直接按Enter键即可。
忽略了映像文件的生成后。屏幕显示如下图所示。
连接程序提示输入库文件的名称。库文件里而包含了一些可以调用的子程序,如果程序中调用了某一个库文件中的子程序,就需要在连接的时候,将这个库文件和目标文件连接到一起,生成可执行文件。但是,这个程序中没有调用任何子程序,所以,这里忽略库文件名的输入,直接按Enter键即可。
忽略了库文件的连接后,屏幕显示如下图所示。
对目标文件的连接结束,连接程序输出的最后一行告诉我们,这个程序中有一个警告错误:“没有栈段”,这里我们不理会这个错误。
上面我们通过对当前路径下的1.obj进行连接的过程,展示了使用连接器对目标文件进行连接的方法。按照上面的过程进行了连接之后,在连接器link.exe运行的目录c:\masm下(即当前路径下),将出现一个新的文件:1.exe,这是对目标文件1.obj进行连接所得到的结果。当然,如果连接过程中出现错误,那么将得不到可执行文件。
Alt+Enter键,//切换全屏。
或着把DOSBOX-0.74 -> OPTIONS -> DOSBOX 0.74 OPTIONS中(dosbox.conf)
fullscreen=true
Ctr+F1键, //改变键盘映射。
Alt+Pause键,//暂停模拟。
Ctrl+Alt+F5 //开始/停止录制视频
Ctrl+F4 //交换挂载的磁盘映像,也就是更新磁盘文件
Ctrl+F5 //截图
Ctrl+F6 //开始/停止录制声音
Ctrl+F7 //减少跳帧
Ctrl+F8 //增加跳帧
Ctrl+F9 //关闭DOSBOX
Ctrl+F10 //捕捉/释放鼠标
Ctrl+F11 //模拟减速
Ctrl+F12 //加速模拟
Alt+F12 //不锁定速