正在阅读:Windows可执行文件简述(二)Windows可执行文件简述(二)

2004-03-30 09:56 出处:PConline 作者:rivershan 责任编辑:linjixiong

  如果PSP中的第一个FCB含有一个有效驱动器标识符,则置AL为00h,否则为0FFh。MS-DOS还置AH为00h或0FFh,这依赖于第二个FCB是否含有一个有效驱动器标识符。
 
  建造PSP后,MS-DOS在PSP后立即开始(偏移100h)加载com文件,它置SS、DS和ES为PSP的段 地址,接着创建一个堆栈。为了创建这个堆栈,MS-DOS置SP为0000h。如果没有分配64K内存,则要置寄存器为比所分配的字节总数大2的值。最后,它把0000h推进栈,这是为了保证与在早期MS-DOS版本上设计的程序的兼容性。

  MS-DOS通过把控制传递偏移100h处的指令而启动程序。程序设计者必须保证com文件的第一条指令是程序的入口点。

  注意,因为程序是在偏移100h处加载,因此所有代码和数据偏移也必须相对于100h.汇编语言程序设计者可通过置程序的初值为100h而保证这一点(例如通过在原程序的开始使用语句org 100h)。

  下面是一个简单的com文件Win32 ASM的例子:

  MAN STRUCT ;定义一个结构

  W dw 1234h ;dw 也可用 word

  B db 9 dup(?) ;db 也可用 byte

  MAN ENDS

  .model tiny ;com格式文件

  .data ;对于com格式文件,数据段的内容会自动放到代码段后

  zz MAN <>,<1,"abcd">,<3,"Ldf">

  .code ;代码段

  .startup ;可使下面的指令从0100H 开始(com格式文件要求)

  mov ax,3031h

  mov zz.W,ax ;对结构赋值


 

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品