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