Fork me on GitHub

Nodepad++结合DOSBox配置一键编译运行

前言

  最近在学习汇编语言程序设计,在最开始肯定是要配置环境啦,但是我们学的还只是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
如果有什么疑惑或者见解欢迎留言。

0%