DOS下的EXE格式文件
- 格式:doc
- 大小:24.50 KB
- 文档页数:3
一、大体思路:用记事本和DOS中的EDIT命令先编写源程序,再把编好文件的后缀名改为*.asm,再进入DOS打开MASM文件夹,分别利用指令MASM和LINK,生成*.obj 和*.exe,然后在DOS中就可以运行该程序。
二、机器环境介绍:利用桌面当作起始位置、MASM的位置C盘DOS命令介绍:开启DOS程序 cmd退回上一层目录 cd..进入子目录就输入 cd+空格+子目录名一下子就回到根目录 cd \程序的名字为:HELLO三、具体方法:第一步:在桌面上单击鼠标右键新建一个记事本,打开记事本输入所要编程的内容,以*.txt的后缀名保存第二步:将保存好的文件,复制好之后,粘贴到C盘的MASM文件夹下(此处有问题,可能是操作系统版本的问题,我把MASM文件夹粘贴到了下面),并更改后缀名为*.asm第三步:在单击(开始)中找到(运行),输入(cmd),开启DOS程序,以下是最为关键的一个环节。
输入(C:),再输入(CD MASM),现在MASM已经在使用中。
第四步:在DOS的窗口光标移动处,输入(MASM HELLO),此时在C盘\用户\lenovo 的MASM文件夹下生成*.obj文件,按四下回车;再输入(LINK HELLO),再按四下回车,便生成*.exe,可执行文件;最后在DOS中直接输入(HELLO),便可运行刚刚编写的程序。
第五步:当文件在编译的过程中,遇到了错误,可以返回第一步,对源程序进行修改。
第六步:启动TD 并同时载入要调试的程序:把要调试的可执行文件拖到TD.EXE 文件名上,Windows 就会打开一个DOS 窗口并启动TD,然后TD 会把该可执行文件自动载入内存供用户调试。
四、ASM文件的抓图五、TD进行调试的界面抓图。
最全dos命令详解英文全拼三.命令行的输入方法在DOS窗口中通过输入英文命令加回车键这种方式来执行程序。
四.内部命令和外部命令命令行程序分为内部命令和外部命令,内部命令是随装入内存的,而外部命令是一条一条单独的可执行文件。
内部命令都集中在根目录下的文件里,电脑每次启动时都会将这个文件读入内存,也就是说在电脑运行时,这些内部命令都驻留在内存中,用dir命令是看不到这些内部命令的。
外部命令都是以一个个独立的文件存放在磁盘上的,它们都是以com和exe为后缀的文件,它们并不常驻内存,只有在电脑需要时,才会被调入内存。
五.常用命令DOS命令总共大约有一百个(包括文本编辑、查杀病毒、配置文件、批处理等),我们这里详细介绍二十个常用的DOS命令。
先介绍一下通配符的概念。
通配符【*和?】*表示一个字符串?只代表一个字符注意通配符只能通配文件名或扩展名,不能全都表示。
例如我们要查找以字母y 开头的所有文件,可以输入以下命令:dir y*.*;如果要查找所有扩展名为exe 的文件,可以用dir .exe。
?只代表一个字符,例如我要查找第二个字母为s的所有文件,可以输入:DIR ?s*.*。
【1. dir】dir是英文单词directory(目录)的缩写,主要用来显示一个目录下的文件和子目录。
[功能] 显示指定磁盘、目录中的文件和子目录信息,包括文件及子目录所在磁盘的卷标、文件与子目录的名称、每个文件的大小、文件及目录建立的日期时间,以及文件子目录的个数、所占用总字节数以及磁盘上的剩余总空间等信息。
[格式] dir [C:][path][filename][.ext][/o][/s][/p][/w][/a]Dir d:\oracle[说明] dir是DOS命令中最常用的一个。
斜杠表示后面的内容是参数。
o 表示按首字母顺序排列显示s 表示只显示系统文件a 表示只显示归档文件【2. md】md是英文make directory(创建目录)的缩写[功能] 创建一个子目录[格式] md [C:]path[举例] 用md 建立一个叫做purple的目录md c:\purple【3. cd】cd是英文change directory(改变目录)的缩写[功能] 改变或显示当前目录[格式] cd [C:][path][说明] 路径可以使用绝对路径和相对路径两种。
⼀、C:\Windows下的可执⾏⽂件 accstat.exe windows 辅助状态指⽰器 arp.exe tcp/ip地址转换协议命令 calc.exe 计算器应⽤软件 cdplayer.exe cd播放器附件 cleanmgr.exe 磁盘清理程序 clipbrd.exe 剪贴板查看应⽤程序 ms-dos⽅式 control.exe 控制⾯板应⽤程序 cvt1.exe fat32转换器 defrag.exe 磁盘碎⽚整理应⽤程序 drvspace.exe 磁盘空间管理应⽤程序 dialer.exe 电话拨号程序 directcc.exe 直接电缆连接 explorer.exe 资源管理器 extrac32.exe windows cab ⽂件解压缩应⽤程序 fontview.exe 字体查看程序 filexfer.exe microsoft⽂件传输应⽤程序 finger.exe ⽤于获得来⾃于运⾏标准finger服务的任何系统的⽤户信息 freecell.exe 空当接龙游戏 grpconv.exe 程序组转换器 hostname.exe 返回tcp/ip配置窗⼝的dns标题头窗⼝中定义的计算机名字 ipconfig.exe 快速浏览系统tcp/ip配置应⽤程序 kodakprv.exe 映像预览应⽤程序 mplayer.exe 媒体播放机 mshearts.exe 红⼼⼤战游戏 nbtstat.exe 显⽰tcp/ip上的netbios(netbt)的状态 net.exe ⼀个⾮常全的络配置、显⽰络信息的命令,有详细帮助 netstat.exe ⽤于检查所有tcp、ip以及udp连接的统计情况 netdde.exe windows 络dde(动态数据交换) netwatch.exe 络监视器 notepad.exe 记事本应⽤程序 packager.exe 对象包装应⽤程序 pbrush.exe 画笔应⽤程序 ping.exe 检测络远端主机是否存在及判断络是否正常的检测⼯具 progman.exe windows3.x中的程序管理器 qfecheck.exe 更新信息⼯具 regedit.exe 注册表编辑器 route.exe ⽤于管理本地tcp/ip路由表的应⽤程序 rsrcmtk.exe 显⽰资源状况 rundll32.exe 将dll作为应⽤程序运⾏ scandskw.exe 磁盘扫描应⽤程序 smartdrv.exe smartdrive(dos磁盘缓冲器)应⽤程序 sigverif.exe microsoft 签字应⽤程序 sndrec32.exe 录⾳机附件 sndvol32.exe ⾳量控制 sol.exe 纸牌游戏 sysmon.exe 系统监视器 taskman.exe 任务执⾏栏应⽤程序 taskmon.exe 任务监视器应⽤程序 telnet.exe 虚拟终端程序 tftp.exe ⼩⽂件传送协议,允许将⽂件传送给tftp服务器 tracert.exe 决定⽤户的系统与⽬标系统之间的路径 tuneup.exe windows 调整向导 vcmui.exe 版本冲突管理器 wangimg.exe 映像应⽤程序 welcome.exe 欢迎光临widows实⽤程序 winfile.exe windows3.x中的⽂件管理器 winhelp.exe 16位的windows 帮助程序 winhlp32.exe 32位的windows 帮助程序 wininit.exe windows 安装初始化应⽤程序 winipcfg.exe tcp/ip 配置实⽤程序 winmine.exe 扫雷游戏 winpopup.exe windows 弹出式消息实⽤程序 winver.exe 显⽰windows 版本号 write.exe 写字板附件 winrep.exe windows 报告⼯具 winalign.exe 排列本地⽂件应⽤程序 wupdmgr.exe windows 更新⼯具。
EXE⽂件结构及读取⽅法⼀、EXE⽂件概念EXE File英⽂全名executable file ,译作可运⾏⽂件,可移植可运⾏ (PE) ⽂件格式的⽂件,它能够载⼊到内存中,并由操作系统载⼊程序运⾏。
是可在操作系统存储空间中浮动定位的可运⾏程序。
如记事本程序notepad.exe ,能够⽤来编辑⽂档。
如:測试.txt双击打开notepad.exe记事本程序来进⾏编辑处理。
⼆、EXE⽂件结构EXE⽂件分为两个部分: EXE⽂件头和程序本体。
exe⽂件⽐較复杂,属于⼀种多段的结构,是DOS最成功和复杂的设计之中的⼀个。
每⼀个exe⽂件包括⼀个⽂件头和⼀个可重定位程序的映像。
⽂件头包括MS-DOS⽤于载⼊程序的信息,⽐如程序的⼤⼩和寄存器的初始值。
⽂件头还指向⼀个重定位表,该表包括指向程序映像中可重定位段地址的指针链表。
MS-DOS通过把该映像直接从⽂件拷贝到内存载⼊exe程序,然后调整定位表中说明的可重定位段地址。
定位表是⼀个重定位指针数组,每⼀个指向程序映像中的可重定位段地址。
预知具体原理与结构,请点击上表是EXE⽂件头三、EXE⽂件打开⽅法因为EXE⽂件⽐較特殊,打开⽅式也有点特殊,需指定格式。
见以下代码:#include<iostream>#include<string>#include<fstream>#include<ios>using namespace std;const int BUFFER_SIZE=1024;void update(ifstream& in){if (!in){return;}std::streamsize length;char buffer[BUFFER_SIZE];while (!in.eof()){in.read(buffer, BUFFER_SIZE);length = in.gcount();if (length > 0){printf("%s",buffer);}}in.close();}int main(){update(ifstream("1.exe", ios_base::binary));return 0;}当中,ios_base 是C++标准程序库中的⼀个类,定义于<ios>头⽂件⾥。
Windows可执行文件简述操作系统中的文件是一种抽象的机制,提供了一种在磁盘上保存信息而且方便以后读取的方法。
在Windows操作系统中,一个用户可以最直接体会到的文件的形式就是以.exe、.dll等为扩展名的可执行文件。
伴随着Windows操作系统的不断进步,其可执行文件的格式也发生了巨大变化。
这期间主要有4个过程:DOS中出现的最简单的以.com为扩展名的可执行文件和以.exe为扩展名的MZ格式(MZ是MZ格式的主要作者Mark Zbikowski的名字的缩写)的可执行文件,Win 3.x下出现的NE(New Executable:分段可执行文件)格式的.exe和.dll文件,Win 3.x 和Win9x所专有的LE(Linear Executable:线性可执行文件,专用于VxD文件),Win9x和Win NT/2000/XP下的32位的可执行文件PE (Portable Executable:可移动的可执行文件)。
这里面com、MZ和NE 属于Win16,PE属于Win32,LE可以兼容Win16和Win32。
在一个操作系统中,可执行的代码最终被装入内存执行之前是以文件的方式存放在磁盘中的,也就是以可执行文件的方式。
下面是Microsoft Windows操作系统中的可执行文件的概述。
1.com格式Windows下最简单的可执行文件就是DOS下的以.com为扩展名的com 文件。
com文件是旧有的只有64kb内存的cp/m机器的产物。
com格式文件最大64K,com文件内含16位程序的二进制代码映像,没有重定位信息。
com文件包含程序的二进制代码的一个绝对映像。
也就是说,为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映像从文件拷贝到内存而加载com程序;它不作任何改变。
为加载一个com程序,MS-DOS首先试图分配内存,因为com程序必须位于一个64K的段中,所以com文件的大小不能超过65,024(64K 减去用于PSP的256字节和用于一个起始堆栈的至少256字节)。
pif为DOS环境下的可执行文件在Windows下执行时所需要的文件格式★常见的文件后缀名.ACA:Microsoft的代理使用的角色文档.acf:系统管理配置.acm:音频压缩管理驱动程序,为Windows系统提供各种声音格式的编码和解码功能.aif:声音文件,支持压缩,可以使用Windows Media Player和QuickTime Player 播放.AIF:音频文件,使用Windows Media Player播放.AIFC:音频文件,使用Windows Media Player播放.AIFF:音频文件,使用Windows Media Player播放.ani:动画光标文件扩展名,例如动画沙漏。
.ans:ASCII字符图形动画文件.arc:一种较早的压缩文件,可以使用WinZip,WinRAR,PKARC等软件打开.arj:压缩文件。
可以使用WinZip,WinRAR,PKARC等软件打开.asf:微软的媒体播放器支持的视频流,可以使用Windows Media Player播放.asp:微软的视频流文件,可以使用Windows Media Player打开.asp:微软提出的Active Server Page,是服务器端脚本,常用于大型网站开发,支持数据库连接,类似PHP。
可以使用Visual InterDev编写,是目前的大热门.asx:Windows Media 媒体文件的快捷方式.au:是Internet中常用的声音文件格式,多由Sun工作站创建,可使用软件Waveform Hold and Modify 播放。
Netscape Navigator中的LiveAudio也可以播放.au文件.avi:一种使用Microsoft RIFF规范的Windows多媒体文件格式,用于存储声音和移动的图片.bak:备份文件,一般是被自动或是通过命令创建的辅助文件,它包含某个文件的最近一个版本,并且具有于该文件相同的文件名.bas Basic:语言源程序文件,可编译成可执行文件,目前使用Basic开发系统的是Visual Basic.bat:批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用.bbs:电子告示板系统文章信息文件.bfc:Windows的公文包文件.bin:二进制文件,其用途依系统或应用而定.bmp:Bitmap位图文件,这是微软公司开发Paint的自身格式,可以被多种Windows和Windows NT平台及许多应用程序支持,支持32位颜色,用于为Windows界面创建图标的资源文件格式。
Dos-mz 可执行(特指exe)文件分为2部分:头部+代码部分;其中:头部:文件头+重定位表;代码部分:程序的所有2进制数据;文件头:0000h 2 char id="MZ";//幻数;0002h 1 word lastsize; //最后一个块使用的字节数;0004h 1 word nblocks; //512字节块的个数;0006h 1 word nreloc; //重定位项个数;0008h 1 word hdrsize; //以16字节段为单位的文件头部尺寸;000ah 1 word minalloc; //需额外分配的最小内存量;000ch 1 word maxalloc; //需额外分配的最大内存量;000eh 1 word initial ss relative to start of executable ;0010h 1 word initial sp ;0012h 1 word checksum; //文件校验和;0014h 1 dword cs:ip relative to start of executable (entry point);(第一字节ip第二字节cs) ;0018h 1 word relocpos; //重定位修正表位置;40h for new-(ne,le,lx,w3,pe etc.) executable ;001ah 1 word noverlay; //重叠的个数,程序为0;说明:1、sizeof(char)=1;sizeof(word)=2; sizeof(dword)=4;2、sizeof(头部+代码部分)=512*(nblocks-1)+lastsize;一般文件大小也等于这个大小,但有的编译器会在代码部分后加上额外的信息使文件变大,额外信息不影响程序的运行可直接删除;3、一般sizeof(文件头)=512;4、重定位表位置是在文件中的偏移;一般汇编器从1eH 处开始为重定位表项;1bH1cH1dH 处我还不知道是什么信息;其他编译器从1cH(1bH处不知)处加自己的信息,从定位表位置要相应改变;重定位表:重定位表有nreloc个重定位表项组成;每个重定位表项格式如下:段基址:段内偏移量1 word 段内偏移量1 word 段基址共占4 字节;(注意winxp是位高权重的储存方式;如数1234H在内存中占字节00H01H;则:【00H】:34H;【01H】:12H;即照3412H格式储存;)说明:1、对每一个修正地址(重定位表项),将其中的基地址与程序代码加载的基地址相加,然后将这个重定位后的修正地址作为指针,将程序代码的实际基地址与这个指针指向的程序代码中的地址相加。
下面是一些常用的文件扩展名:.386 : 虚拟驱动程序.asf : 微软的媒介体播放器支持的视频流,可以使用WINDOS MEDIA PLAYER 播放..asp : 微软提出的ACTIVE SERVER PAGE 是服务器端脚本,常用于大型网站开发,支持数据库连接,类似PHP..bak : 备份文件,一般是被自动或是通过命令创建的辅助文件..bat : 批处理文件,在DOS中,.bat文件是可执行文件,由一系列命令构成,其中可包含对其他程序的调用..bmp : Bitmap位图文件,这是微软公司开发Paint的自身格式,可以被多种Windows平台及许多应用程序支持..cda : CD音频轨道..cdr : CroelDraw中的一种图形文件格式..cfg : 系统或应用软件配置文件..chm : 编译过后的HTML文件,常用于制作帮助文件和电子文档..com : DOS可执行命令文件,一般小于64KB..dat : 数据文件,在应用程序中使用..dll : Windows动态链接库,几乎无处不在,但有时由于不同版本DLL冲突会造成各种各样的问题..doc : 是字处理软件WORD创建的文档..drv : 设备驱动程序文件,用在各种系统中..exe : 可执行文件,虽然后缀名相同,但具有不同的格式和版本..gif : 在各种平台的各种图形处理软件上均能够处理的,经过压缩的一种图形文件格式..html : 保存超文本描述语言的文本文件,用于描述各种各样的网页,使用各种浏览器打开..ico : Windows中的图标文件,可以包含同一个图标的多种格式,使用图标编辑软件创建..img : 磁盘映象文件,用HD-COPY,Winlmage 等工具打开后可以恢复到一张磁盘上..inf : 安装信息文件..ini : 初使化文件..jpg : 静态图像专家组制订的静态图像压缩标准,具有很高的压缩比,使用非常广泛..ink : 快捷方式,这个文件指向另一个文件,开始菜单的程序文件夹下每条项目都是一个LNK文件..mid : 音频压缩文件,曾经非常流行,不过在现在的软件中用得很少了..mp3 : 采用MPEG-1 Layout 3标准压缩的音频文件,是网上主要的压缩音频文件..mpg : 采用MPEG-1标准压缩的视频文件,与VCD使用的格式非常相近,播放软件大都能播放..pdf : 图文多媒体文件,ADOBE公司定义的电子印刷品文件格式,Internet网上的很多多电子印刷品都是.pdf格式..ppt : Microsoft PowerPoint演示文稿..rar : WinRAR提供的压缩文件格式,压缩率超过ZIP,同时提供的功能也更为丰富..rm : Windows下的RealPayer所支持的视频压缩文件,网上非常流行的流式视频文件..swf : 非常流行的动画格式,它用比较小的体积来表现丰富的多媒体形式..sys : 系统文件,驱动程序等.在不同的操作系统中有不同的定义..tif : 图像文件,此图像格式复杂,存储内容多,占用存储空间大,Windows主要的图像应用程序都支持此格式..tmp : 临时文件,是系统和应用程序产生的临时使用的文件,当系统和应用程序退出时,会自动地删除其建立的临时文件..ttfTrueType : 格式的字体文件..txt : 纯文本文件..url : Internet上URL地址的快捷方式..war : 音频文件,此文件格式是在Windows上用于保存间频信息的资源格式..wps : WPS文本文件..wri : Windows写字板文档..zip : 是DOS/WINDOWS中最常见文件压缩格式,也是互联网上的标准压缩格式.。
EXE和DLL文件结构EXE(Execution)和DLL(Dynamic Link Library)是Windows操作系统中常见的可执行文件格式。
本文将从结构、功能和使用方面对EXE和DLL文件进行详细的介绍。
1.EXE文件结构:EXE文件是一种可执行文件,用于存储和执行程序代码。
其结构如下:1.1 DOS头部(DOS Header):存储DOS可执行文件的信息,包括魔数、代码段长度等。
1.2 PE头部(PE Header):存储Windows可执行文件的信息,包括文件类型、节表的偏移量等。
1.3 节表(Section Table):用于记录程序代码和数据的物理位置及大小,包括.text(代码段)、data(数据段)等。
1.4 导入表(Import Table):存储程序引用的外部函数和DLL文件。
1.5 导出表(Export Table):存储程序对外提供的函数和数据。
1.6 资源表(Resource Table):存储程序所需的资源,如图标、位图、字符串等。
1.7 异常表(Exception Table):用于处理程序中的异常,如访问越界、除零等。
1.8 其他表格:包括重定位表(Relocation Table)、调试表(Debug Table)等。
2.DLL文件结构:DLL文件是一种动态链接库文件,用于在不同的程序间共用函数和数据。
其结构如下:2.1 DOS头部(DOS Header):与EXE文件的DOS头部相同。
2.2 PE头部(PE Header):与EXE文件的PE头部相同。
2.3 节表(Section Table):与EXE文件的节表相同。
2.4 导入表(Import Table):记录DLL文件中引用的外部函数和其他DLL文件。
2.5 导出表(Export Table):记录DLL文件对外提供的函数和数据。
2.6 资源表(Resource Table):与EXE文件的资源表相同。
DOS基础DOS基础一、DOS的出现及发展DOS——Disk Operating System磁盘操作系统,它是一组非常重要的程序,可以使用户很容易地建立、管理程序和数据以及对设备进行管理1、DOS的出现1980年10月IBM向一些大的软件公司寻找为其正在设计的PC机配套的OS,于是微软公司向Seattle Computer Products公司购买下了MS—DOS的前身:86—DOS的使用权。
1981年7月微软公司买下了86—DOS的专利,并对其作了大量改动,命名为MS—DOS。
1981年秋IBM—PC 推出后,IBM选定MS—DOS为基本OS,并改名为PC—DOS。
也就是说,PC—DOS是由MS—DOS演变而来的,它与MS—DOS仅仅是名称上的不同,实际并没有太大的差别。
2、DOS的发展随计算机硬件的快速发展,DOS 也不断更新。
从最初的MS—DOS 1.0至目前的DOS 7.x,其面貌已大相径庭。
每次DOS 本身功能的提高表现在版本的更新。
DOS的版本号由两部分组成,主版本号和次版本号。
例如:DOS6.0中6是主版本号,0是次版本号。
主版本号:软件在功能上有重要增加。
次版本号:软件在功能上仅有次要的增加,或者仅排除前一版本中的某些错误。
如果软件在功能上有重要的增加,那么主版本号就加1,如DOS6.0升级为DOS7.0;如果软件在功能上有次要的增加,或者仅修改前一版本中的某些错误,次版本号就加1,如DOS6.0变为DOS6.1。
二、DOS的基础知识1、文件——计算机外部存储器中的相关信息的集合。
磁盘作为计算机的外部存储器,是以文件的形式来存放和组织信息的。
一个文件可以是一篇文章,一个计算机程序、一副图片信息等等。
1)文件的属性①系统属性:只有系统文件才具有这种属性,电脑通过调用这类文件维护正常的工作状态。
②隐含属性:在通常情况下,不能从目录列表中看到这·有一些名字是为系统的设备所留用的,也不能起作文件名:PRN、CON、COS、COM1、COM2、LPT1、LPT2……·文件名应具实用性(方便记忆)、唯一性。
DOS下的EXE格式文件
生成EXE格式文件
;Model伪操作的格式为:Model memory_mode,model_options
其中:memory可为 tiny/small/medium/compact/large/huge/flat等
除tiny编译成com格式文件外,其他的都是exe格式文件
small是其中较常用的一种,所以这里解说small
对于small,所有数据都放在一个64K的段内,所有代码都放在另一个64K段内,数据和代码都是近访问。
--------------------------------------------------------------------
;例:显示一个字符串
;文件名:2.asm,编译链接后生成文件 2.exe
.model small ;生成EXE格式文件
.stack 100h ;若不带100h,则默认堆栈大小为400H
.data ;初始化的数据段
mess db 'How, world!$'
.data? ;未初始化数据段,该段不占用EXE文件的大小!
pp Dw 200H DUP(?) ;对于未初始化数据,只能是使用“?”
.code ;代码段
.startup ;可使用该伪指令初始化DS及堆栈值(参后面的例子)
mov ah,9
lea dx,mess
int 21h ;显示信息
mov pp,ax
.exit ;可设置返回码
end ;因使用了.startup,所以不用指出程序从哪里开始啦!
---------------------------------------------------------------
生成2.exe文件的详细操作过程:
D:\Masm615>dir 2
Volume in drive D has no label
Volume Serial Number is 18F0-186B
Directory of D:\Masm615
2 ASM 711 02-15-0
3 10:48 2.asm
1 file(s) 711 bytes
0 dir(s) 2,408,906,752 bytes free
D:\Masm615>ml 2.asm
Microsoft (R) Macro Assembler Version 6.15.8803
Patched for you by promethee [ECL] in the year 2001 - enjoy
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Assembling: 2.asm
Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994 Copyright (C) Microsoft Corp 1984-1993. All rights reserved.
Object Modules [.obj]: 2.obj
Run File [2.exe]: "2.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
D:\Masm615>dir 2
Volume in drive D has no label
Volume Serial Number is 18F0-186B
Directory of D:\Masm615
2 ASM 711 02-15-0
3 10:48 2.asm
2 OBJ 207 02-15-0
3 10:50 2.obj
2 EXE 562 02-15-0
3 10:50 2.exe
3 file(s) 1,480 bytes
0 dir(s) 2,408,910,848 bytes free
D:\Masm615>2
How, world!
D:\Masm615>_
_______________________________________________________________
用DEBUG查看生成的EXE文件
-r
AX=0000 BX=0000 CX=0032 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=128C ES=128C SS=12A0 CS=129C IP=0000 NV UP EI PL NZ NA PO NC
129C:0000 BA9E12 MOV DX,129E
-u0 25
129C:0000 BA9E12 MOV DX,129E ;这是由.startup伪指令翻译过来的
129C:0003 8EDA MOV DS,DX ;设置数据段(初始化数据和未初始化数据具有相同的段值)
129C:0005 8CD3 MOV BX,SS
129C:0007 2BDA SUB BX,DX
129C:0009 D1E3 SHL BX,1
129C:000B D1E3 SHL BX,1
129C:000D D1E3 SHL BX,1
129C:000F D1E3 SHL BX,1
129C:0011 FA CLI
129C:0012 8ED2 MOV SS,DX ;重新设置堆栈
129C:0014 03E3 ADD SP,BX ;这样,ds=ss
129C:0016 FB STI
129C:0017 B409 MOV AH,09 ;此处开始是我们写的程序
129C:0019 8D160600 LEA DX,[0006] ;对于small,数据的定位类型是word,即必须是偶数,如6
129C:001D CD21 INT 21
129C:001F A32001 MOV [0120],AX ;未初始化数据位于“代码\数据\堆栈”的后面
129C:0022 B44C MOV AH,4C
129C:0024 CD21 INT 21
-d129e:6 11
129E:0000 48 6F-77 2C 20 77 6F 72 6C 64 How, world
129E:0010 21 24 !$
-g17
AX=0000 BX=0020 CX=0032 DX=129E SP=0120 BP=0000 SI=0000 DI=0000
DS=129E ES=128C SS=129E CS=129C IP=0017 NV UP EI PL NZ NA PO NC
129C:0017 B409 MOV AH,09
---------------------------------------------------
此时可看一下程序在内存中的布局,以加深理解!
注:原堆栈SS:SP=12A0:0100和新堆栈129E:0120是一样的!。