若没有下载的小伙伴可以参考这篇文章下载,里面有很多设置也非常不错
Windows 64 位系统下安装配置 DOSBox 及 debug.exe

首先介绍俩种方法来编译源程序

方法一:

step1:编辑源程序

1、打开DosBox
2、运行edit
在命令行输入

edit


3、在Edit中编译程序,如下图所示(随便举了一个例子)
3.1 File->save as
3.2 输入你要保存的文件名,以asm后缀结尾,之后点击OK
3.3 点击File->exit来退出edit

4、再进行完上述对源程序的编辑之后,会得到一个源程序文件D:\software\DOSBox\MASM\hui.asm
接下来进行编译源程序

step2:编译

1、进入DOS,运行masm.exe,会出现一些版本信息
上面我命名为hui,择需要输入hui即可,如果不是以.asm为扩展名的话,择需要输入全名,比如“hui.txt"

2、输入要编译的源程序文件名后,按enter键

注:若我们当前已经再源文件目录下,直接输入文件名就行,要是是再其他路径中,则要输入完整路径

执行完后生成hui.obj文件

这个列表文件不生成,直接Enter

同样先不用生成教程引用文件

step3:连接

对源程序进行编译得到目标文件后,我们需要对目标文件进行连接,从而可以得到可执行文件,接下来我们要将.obj文件连接为.exe文件

1、运行link后,直接输入文件名



2、默认可执行文件名(当然在这里也可以指定文件名或者路径),按enter

3、提示生成映像文件,这里不生成,按enter

4、这里提示输入库文件名,若调用子程序则要输入库文件名,这里没有调用,直接enter


注:这里有一个警告:没有栈段,先不用管

偷懒方法!以简化方式进行编译和连接

masm后面要加上被编译的源程序文件的路径,文件名,再加上分号,此时生成hui.obj文件

link后面要加上被连接的源程序文件的路径,文件名,再加上分号,此时生成hui.exe文件

方法二
新建一个.txt文件,在里面进行编码,相当于上面的edit步骤
编码完成后进行保存,并修改后缀名为.asm,注意文件应该在MASM路径下,其余步骤和方法一 一样。

EXE文件的执行

  • 在DOS中直接执行hui.exe时,是正在运行的command,将hui.exe中的程序加载入内存
  • commond设置CPU的CS:IP指向程序的第一条指令,从而使程序得以运行
  • 运行结束后,返回到commond中,CPU将继续运行commond

程序执行过程的跟踪,以hui.exe为例
1、使用debug将程序载入内存

2、使用R命令来查看各个寄存器的设置情况(关于debug命令,参考这篇博客)

3、使用U命令查看其他指令
4、现在开始跟踪,使用T命令进行单步执行每一条指令
5、到了int 21 用P 命令执行

6、使用q命令退出debug,回到commond中

如何查看你最终结果呢?

还是以上面例子为例,使用t命令单步执行,知道mov AX,4cH为止,程序结束,AX中的值就为其结果

汇编程序的编辑、编译、连接与执行(附带DOSBox安装)相关推荐

  1. 【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed

    [Qt]Qt程序编译成功,执行时报错:程序异常结束,crashed 错误打印信息 Starting E:*exe- 程序异常结束. E:*.exe crashed. 原因 使用到外部库,编译时,指定了 ...

  2. windows环境中利用NMake工具编译连接C++源代码

    这篇文章是上一篇文章(http://www.cnblogs.com/LCCRNblog/p/4532643.html)的补充,因此需要先看看上一篇文章. 最近在写代码的时候,需要通过命令的方式来执行生 ...

  3. VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误...

    1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...

  4. 如何将内核静态库编译连接到驱动程序中去【转】

    转自:http://blog.csdn.net/ganjianfeng2003/article/details/8089551 如何将内核静态库编译连接到驱动程序中去 2010-12-07 08:27 ...

  5. u-boot编译连接分析

    时间 :2016年4月3日09:24:04 地点 :宿舍. 功能 :u-boot编译连接阶段分析.(以smdk2410开发板为例) 在顶层目录下执行完"make smdk2410_confi ...

  6. 动态编译和静态编译及Java执行

    静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了.你写小程序没问题,但程序一大,加载的过程(就是当你运行程序时初始化的过程)就比较费力了..大多数 ...

  7. Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码

    前言 最近想要切换编辑工具,之前工作中使用过 Source Insight,Eclipse,CLion 来写 C++ 代码.目前来说 Source Insight 已经非常古老,只有编写代码还说得过去 ...

  8. python编译过程和执行原理

    python编译过程和执行原理 (1)python执行原理 这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链 ...

  9. JVM——从源码编译到类执行与内存管理全流程梳理

    从Java源码编译开始说起 分为三个步骤: 1:分析和输入到符号表 分析:词法和语法分析,将代码字符串转变为token序列,由token序列生产抽象语法树 输入:将符号输入到符号表,确定类的超类型和接 ...

最新文章

  1. 在JavaScript中生成随机字符串/字符
  2. 李开复:AI行业正在回归商业本质,技术公司要有服务心态落地为王 | MEET2020
  3. 《算法导论》读书笔记(七)
  4. 删除A数据表中的一行数据时,不小心将表名写成了B,现在想恢复B中刚删除的的着一行数据怎么办...
  5. 网络优化软件apk,金九银十怎么从中小企业挤进一线大厂?我先收藏为敬
  6. 笔记05 局部类型
  7. 特斯拉上海工厂启动试生产 首批车被曝将销售给工厂员工
  8. Java 换行和回车
  9. JDK1.8与spring3.x的不兼容
  10. cannot register datanode 0.0.0.0:1002,because current license expired time is
  11. 重磅!阿里云发布业界首本云网络白皮书
  12. FINALDATA 使用教程
  13. trados 有道api_小白教程(四) | 你和专业翻译还差一个Trados
  14. 第七章 yaml格式
  15. 试题 基础练习 特殊回文数
  16. 【优动漫 PAINT应用篇】绘制插画之草稿
  17. ArrayList和LinkedList的异同
  18. 树莓派的一生:树莓派十年
  19. 有个开发者总结这 15 优雅的 JavaScript 个技巧
  20. linux 中的 super 命令

热门文章

  1. 《软件安装》VMware 安装 centos8
  2. 【JAVA 第四章 流程控制语句】课后习题 二维坐标距离 三角形判断等
  3. faker生成测试数据,一些数据生成方法摘取
  4. 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出
  5. 【C语言】输入三个正整数a,b,c,求最大值,要求定义一个计算最大值的函数max(a,b),返回a,b的值...
  6. 谷歌聊天机器人api_如何编写针对Google地图等网络应用量身定制的聊天机器人
  7. web开发的一些工具技巧_有用的技巧可帮助您建立Web开发人员的良好习惯
  8. 垃圾回收算法的实现原理_有关垃圾回收算法工作原理的动画指南
  9. flutter 生成文档_flutter 如何实现文件读写(使用篇)
  10. python爬取知乎live_Python爬虫从入门到放弃(十九)之 Scrapy爬取所有知乎用户信息(下)...