汇编程序的编辑、编译、连接与执行(附带DOSBox安装)
若没有下载的小伙伴可以参考这篇文章下载,里面有很多设置也非常不错
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安装)相关推荐
- 【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed
[Qt]Qt程序编译成功,执行时报错:程序异常结束,crashed 错误打印信息 Starting E:*exe- 程序异常结束. E:*.exe crashed. 原因 使用到外部库,编译时,指定了 ...
- windows环境中利用NMake工具编译连接C++源代码
这篇文章是上一篇文章(http://www.cnblogs.com/LCCRNblog/p/4532643.html)的补充,因此需要先看看上一篇文章. 最近在写代码的时候,需要通过命令的方式来执行生 ...
- VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误...
1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...
- 如何将内核静态库编译连接到驱动程序中去【转】
转自:http://blog.csdn.net/ganjianfeng2003/article/details/8089551 如何将内核静态库编译连接到驱动程序中去 2010-12-07 08:27 ...
- u-boot编译连接分析
时间 :2016年4月3日09:24:04 地点 :宿舍. 功能 :u-boot编译连接阶段分析.(以smdk2410开发板为例) 在顶层目录下执行完"make smdk2410_confi ...
- 动态编译和静态编译及Java执行
静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了.你写小程序没问题,但程序一大,加载的过程(就是当你运行程序时初始化的过程)就比较费力了..大多数 ...
- Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码
前言 最近想要切换编辑工具,之前工作中使用过 Source Insight,Eclipse,CLion 来写 C++ 代码.目前来说 Source Insight 已经非常古老,只有编写代码还说得过去 ...
- python编译过程和执行原理
python编译过程和执行原理 (1)python执行原理 这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链 ...
- JVM——从源码编译到类执行与内存管理全流程梳理
从Java源码编译开始说起 分为三个步骤: 1:分析和输入到符号表 分析:词法和语法分析,将代码字符串转变为token序列,由token序列生产抽象语法树 输入:将符号输入到符号表,确定类的超类型和接 ...
最新文章
- 在JavaScript中生成随机字符串/字符
- 李开复:AI行业正在回归商业本质,技术公司要有服务心态落地为王 | MEET2020
- 《算法导论》读书笔记(七)
- 删除A数据表中的一行数据时,不小心将表名写成了B,现在想恢复B中刚删除的的着一行数据怎么办...
- 网络优化软件apk,金九银十怎么从中小企业挤进一线大厂?我先收藏为敬
- 笔记05 局部类型
- 特斯拉上海工厂启动试生产 首批车被曝将销售给工厂员工
- Java 换行和回车
- JDK1.8与spring3.x的不兼容
- cannot register datanode 0.0.0.0:1002,because current license expired time is
- 重磅!阿里云发布业界首本云网络白皮书
- FINALDATA 使用教程
- trados 有道api_小白教程(四) | 你和专业翻译还差一个Trados
- 第七章 yaml格式
- 试题 基础练习 特殊回文数
- 【优动漫 PAINT应用篇】绘制插画之草稿
- ArrayList和LinkedList的异同
- 树莓派的一生:树莓派十年
- 有个开发者总结这 15 优雅的 JavaScript 个技巧
- linux 中的 super 命令
热门文章
- 《软件安装》VMware 安装 centos8
- 【JAVA 第四章 流程控制语句】课后习题 二维坐标距离 三角形判断等
- faker生成测试数据,一些数据生成方法摘取
- 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出
- 【C语言】输入三个正整数a,b,c,求最大值,要求定义一个计算最大值的函数max(a,b),返回a,b的值...
- 谷歌聊天机器人api_如何编写针对Google地图等网络应用量身定制的聊天机器人
- web开发的一些工具技巧_有用的技巧可帮助您建立Web开发人员的良好习惯
- 垃圾回收算法的实现原理_有关垃圾回收算法工作原理的动画指南
- flutter 生成文档_flutter 如何实现文件读写(使用篇)
- python爬取知乎live_Python爬虫从入门到放弃(十九)之 Scrapy爬取所有知乎用户信息(下)...