现在的位置: 首页 > 综合 > 正文

EXE执行步骤

2013年12月02日 ⁄ 综合 ⁄ 共 1606字 ⁄ 字号 评论关闭

系统把.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

抱歉!评论已关闭.