老文章档案 · 2003 年

DOS下的EXE格式文件

破解教程 · 汇编专区 · 2003-09-19 · 作者:怜香 人气: · 出处:赢政天下整理收藏)

生成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是一样的!

(出处:赢政天下整理收藏)

相关文章:

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史