6

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

 3 years ago
source link: https://xjdkc.github.io/Nodepad++%E7%BB%93%E5%90%88DOSBox%E9%85%8D%E7%BD%AE%E4%B8%80%E9%94%AE%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8C.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

发表于 2018-03-27

| 分类于 Assembly

| 0 Comments

  |   字数统计: 1,135(字)   |   阅读时长: 5(分)

  最近在学习汇编语言程序设计,在最开始肯定是要配置环境啦,但是我们学的还只是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盘

配置编译运行

修改完DOSBox的配置文件,接下来就需要配置编译运行快捷键了。
首先打开Notepad++ 输入一段测试汇编源程序,例如:

.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
如果有什么疑惑或者见解欢迎留言。

</div


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK