前言
最近在学习汇编语言程序设计,在最开始肯定是要配置环境啦,但是我们学的还只是8086系列的处理器的汇编,而现在的CPU是酷睿系列了,根本不支持,所以就需要用到DOSBox来模拟环境,然而这就遇到一个问题了:DOSBox编译链接运行程序十分麻烦,而且每次重新打开都需要输入一大堆东西,很是浪费时间,那么如何简单快捷的实现像写C,C++时那样一个快捷键源代码就自动编译运行了呢?于是就有了这篇博文。
配置环境
首先介绍一下实现环境:
- DOSBox 0.74 模拟DOS系统
- Notepad++ v7.5.6 (64 bit) 用于编辑汇编源程序
- MASM 5.0 汇编程序编译器
- LINK 连接程序
- TD Turbor Debugger 调试器
这些软件需要自己下好并安装在对应位置,其中MASM LINK TD需要英文路径。
具体实现
实现的大致思路就是通过Notepad++运用批处理指令打开DOSBox 并在其中输入相关指令使源代码编译链接运行,实现编译运行调试的快捷指令需要三步
修改DOSBox配置文件
首先打开以下路径:
C:\Users\Mr. Xing\AppData\Local\DOSBox
然后就会在其中看到DOSBox的配置文件 dosbox-0.74.conf 用记事本打开在最下方的autoexec下输入MASM,LINK,TD的存放目录即
mount c d:\program\asm
c:
然后在保存关闭,这样在运行DOSBox的时候就会首先执行这两行而不用重新输入。两行指令意思是
- 将d:\program\asm挂载为DOSBox下的c盘
- 进入c盘
配置编译运行
修改完DOSBox的配置文件,接下来就需要配置编译运行快捷键了。
首先打开Notepad++ 输入一段测试汇编源程序,例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22.386
;----------------------------
STACK SEGMENT STACK use16
DB 200 DUP(0)
STACK ENDS
;----------------------------
DATA SEGMENT use16
MSG DB 'How are you! $'
DATA ENDS
;------------------------------
CODE SEGMENT use16
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET MSG
MOV AH, 9
INT 21H
MOV AH,4CH ;exit
INT 21H
;-----------------------------
CODE ENDS
END BEGIN
然后点击菜单项的运行,如下图:
然后输入以下命令
D:\软件\DOSBox\DOSBox-0.74\DOSBOX.exe -c "@echo off" -c "mount d $(CURRENT_DIRECTORY)" -c "MASM d:\$(NAME_PART).asm;" -c "LINK $(NAME_PART).obj;" -c "COPY $(NAME_PART).exe d:\$(NAME_PART).exe" -c cls -c "d:\$(NAME_PART).exe" -c echo. -c pause -c exit
这段指令的意思如下:
D:\软件\DOSBox\DOSBox-0.74\DOSBOX.exe DOSBox
软件运行程序文件地址-c DOSBox command
命令 后跟一条指令且每条指令之前都要加-c@echo off
批处理指令 意思是关闭回显(这样在输入每条指令的时候就不会有c:\之类的)mount d $(CURRENT_DIRECTORY)
将当前汇编源程序挂在到DOSBox的d盘MASM d:\$(NAME_PART).asm;
编译asm源程序生成二进制目标文件LINK $(NAME_PART).obj;
链接二进制目标文件生成EXE文件COPY $(NAME_PART).exe d:\$(NAME_PART).exe
将生成的EXE文件复制到源代码目录下cls
清屏d:\$(NAME_PART).exe
运行生成程序echo.
换行pause
暂停exit
退出DOSBox$(FULL_CURRENT_PATH)
当前文件绝对路径 如d:\program\asm\demo.asm$(CURRENT_DIRECTORY)
当前目录 如d:\program\asm$(NAME_PART)
当前文件文件名 如demo$(FILE_NAME)
当前文件全名 如demo.asm$(EXT_PART)
当前文件扩展名如 asm
特别注意:如果你的源代码在E盘,那么请在输入指令的时候将源代码挂载到E盘
这段程序只适合于保存到D:盘任何地方的asm文件
然后保存设置响应的名称和快捷键就OK了(我设置的是CTRL+ALT+B),具体运行效果如下:
配置调试
同理只需要在运行框中输入以下批处理指令即可
D:\软件\DOSBox\DOSBox-0.74\DOSBOX.exe -c "mount d $(CURRENT_DIRECTORY)" -c "TD d:\$(NAME_PART).exe"
运行结果如下:
写在最后
这次实现一键编译翻了许多文档,发现最全的还是官方文档,学习到了许多关于批处理的知识,收获还是蛮多的。
还有就是由于指令长度的限制 在一键编译的时候并没有删除编译得到的obj和exe文件需要清理,有需要的小伙伴可以怎加一条指令del专门清理.obj 和 .exe
如果有什么疑惑或者见解欢迎留言。