庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>汇编语言>技巧教程>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

DOS下的EXE格式文件

 作者:本站收集   日期:2005-8-1 15:50:48
字号选择〖 〗/ 双击滚屏 单击停止   

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

上一篇:小试Win32汇编    下一篇:汇编语言与C语言的接口技术  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-1 15:50:48
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿