EXE执行步骤

系统把.EXE程序从磁盘装入存储器时,装入程序是按以下步骤执行的:

1. 从磁盘取.EXE文件

2. 在可用内存储器的一个小段边界上,构造一个256字节(100H)的程序段前缀(PSP)

3. 紧随PSP的下一个地址。把程序装入存储器中

4. 把PSP的地址装入DS与ES寄存器

5. 把代码段地址装入CS寄存器并把IP寄存器设置成代码段中第一条指令的偏移值(通常是0)

6. 把堆栈段地址装入SS寄存器并把SP寄存器设置成堆栈大小

7. 传送控制给要执行的程序,通常从代码段的第一条指令开始

程序的装入程序将CS:IP SS:SP正确的初始化。程序的装入程序在DS和ES中都存放了PSP的地址,而在这些寄存器中你的程序需要数据段的地址

汇编代码

TITLE hello (EXE)  .MODEL SMALL  .STACK 64  .DATA  MSG DB 'hello, lts', '$'  .CODE      MAIN PROC NEAR   MOV AX, @data   MOV DS, AX   PUSH AX   MOV AH, 09H   LEA DX, MSG   INT 21H  MAIN ENDP

 END MAIN

 寄存器和执行状态

-r AX=0000  BX=0000  CX=0019  DX=0000  SP=0040  BP=0000  SI=0000  DI=0000 DS=0B46  ES=0B46  SS=0B58  CS=0B56  IP=0000   NV UP EI PL NZ NA PO NC 0B56:0000 B8560B        MOV     AX,0B56 -t

AX=0B56  BX=0000  CX=0019  DX=0000  SP=0040  BP=0000  SI=0000  DI=0000 DS=0B46  ES=0B46  SS=0B58  CS=0B56  IP=0003   NV UP EI PL NZ NA PO NC 0B56:0003 8ED8          MOV     DS,AX -t

AX=0B56  BX=0000  CX=0019  DX=0000  SP=0040  BP=0000  SI=0000  DI=0000 DS=0B56  ES=0B46  SS=0B58  CS=0B56  IP=0005   NV UP EI PL NZ NA PO NC 0B56:0005 50            PUSH    AX -t

AX=0B56  BX=0000  CX=0019  DX=0000  SP=003E  BP=0000  SI=0000  DI=0000 DS=0B56  ES=0B46  SS=0B58  CS=0B56  IP=0006   NV UP EI PL NZ NA PO NC 0B56:0006 B409          MOV     AH,09 -t

AX=0956  BX=0000  CX=0019  DX=0000  SP=003E  BP=0000  SI=0000  DI=0000 DS=0B56  ES=0B46  SS=0B58  CS=0B56  IP=0008   NV UP EI PL NZ NA PO NC 0B56:0008 8D160E00      LEA     DX,[000E]                          DS:000E=6568

-t

AX=0956  BX=0000  CX=0019  DX=000E  SP=003E  BP=0000  SI=0000  DI=0000 DS=0B56  ES=0B46  SS=0B58  CS=0B56  IP=000C   NV UP EI PL NZ NA PO NC 0B56:000C CD21          INT     21 -p Hello, lts AX=0924  BX=0000  CX=0019  DX=000E  SP=003E  BP=0000  SI=0000  DI=0000 DS=0B56  ES=0B46  SS=0B58  CS=0B56  IP=000E   NV UP EI PL NZ NA PO NC 0B56:000E 68            DB      68

你可能感兴趣的:(EXE执行步骤)