• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > DOS下的EXE格式文件

DOS下的EXE格式文件

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了dos下运行exe文件,dos命令运行exe文件,dos命令执行exe文件,dos怎么运行exe文件,dos命令打开exe程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

生成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-03 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-03 10:48 2.asm
2 OBJ 207 02-15-03 10:50 2.obj
2 EXE 562 02-15-03 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是一样的!

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • DOS下的EXE格式文件

相关文章

  • 2017-06-28用汇编编写屏幕保护程序
  • 2017-06-28虚拟8086模式的内存管理
  • 2017-06-28汇编教程之创建简单的窗口
  • 2017-06-28驱动程序的动态加载
  • 2017-06-28汇编源码系列之free
  • 2017-06-28汇编源码系列之dossym
  • 2017-06-28汇编教程之win32消息框
  • 2017-06-28汇编语言中‘子程序’的设计方法
  • 2017-06-28制作动态链接库
  • 2017-06-28汇编教程:使用语句

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 实模式存储器寻址
    • 汇编源码系列之ctrladel
    • 80x86寄存器组
    • 汇编源码系列之fxn
    • 汇编语言程序设计(三)
    • 循环程序的设计
    • 子程序设计
    • 通用数据传送指令
    • “HELLO,WORLD”进阶汇编程序系列
    • 如何分析未文档化的数据结构

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有