目 编辑程序 源 程 序 汇编程序 标 程 连接程序 执行程序 序 汇编 连接 ASM OBJ EXE 宏汇编程序: MASMEXE 连接程序: LINK EXE 步骤: 1)编写源程序;2)汇编;3)连接;4)调试。 26
26 .ASM .OBJ .EXE 汇编 连接 宏汇编程序: MASM.EXE 连接程序: LINK.EXE 编 辑 程 序 源 程 序 连 接 程 序 汇 编 程 序 目 标 程 序 执 行 程 序 步骤: 1)编写源程序;2)汇编;3)连接;4)调试
用户编写程序,程序在计算机中运行, 计算机的控制由操作系统交给用户程序,运 行用户程序,当用户程序运行结束后,应再 将控制权交回操作系统,所以,在程序中应 该有返回DOS的操作。在计算机中,返回 DOS的操作由操作系统中的一个子程序来实 现,用户使用时调用这个子程序即可。 27
27 用户编写程序,程序在计算机中运行, 计算机的控制由操作系统交给用户程序,运 行用户程序,当用户程序运行结束后,应再 将控制权交回操作系统,所以,在程序中应 该有返回DOS的操作。在计算机中,返回 DOS的操作由操作系统中的一个子程序来实 现,用户使用时调用这个子程序即可
每当一个用户的可执行文件EXE装入内存后,存储器的 分配情况如图: 00000H 系统占用 DSES 程序段前缀100个字节 用户数据区 SS 用户堆栈区 用户程序空间 CSr用户代码段 系统和 FFFFFHL ROM占用 28
28 每当一个用户的可执行文件.EXE装入内存后,存储器的 分配情况如图: 系统占用 程序段前缀 用户数据区 用户堆栈区 用户代码段 …… …… 系统和 ROM占用 00000H DS,ES 100个字节 SS 用户程序空间 FFFFFH CS
无论用户程序有几段,也无论这些段 的排列顺序如何,用户程序的代码前 系统占用 定有100个字节的程序段前缀 INT 20H 程序段前缀 Program Segment Prefix,简称PSP), 用户数据区 PSP给出了用户的可执行文件(EXE) 的若干控制信息。其中PSP的开始处 用户堆栈区 用户代码段 第1,2字节)有一条中断指令INT20H 的代码,通过它可以结束用户程序, 返回操作系统。在用户程序执行完以 后,通过执行该条指令就可以返回 系统和 ROM占用 DOS。 29
29 系统占用 INT 20H 程序段前缀 用户数据区 用户堆栈区 用户代码段 …… …… 系统和 ROM占用 无论用户程序有几段,也无论这些段 的排列顺序如何,用户程序的代码前 一定有100个字节的程序段前缀 (Program Segment Prefix, 简称PSP), PSP给出了用户的可执行文件(.EXE) 的若干控制信息。其中PSP的开始处 (第1,2字节)有一条中断指令INT 20H 的代码,通过它可以结束用户程序, 返回操作系统。在用户程序执行完以 后,通过执行该条指令就可以返回 DOS
如何使用户程序执行完后返回来执行这条指令? 首先将用户程序定义为一个远过程,当 可执行文件装入内存后,DS,ES两个段 系统占用 寄存器被CPU自动设置为指向PSP的首ss|r20m 址,所以一般程序的开始指令为: 程序段前缀 PUSH DS 堆栈 00H 用户数据区 情况/m 00H MOV AX. 0 SS PSP 用户堆栈区 PUSH AX PSP H CS用户代码段 即将DS的内容和0000压入堆栈,程序 结束时的最后一条语句为RET,就把压 RET 入堆栈的PSP段的段地址和偏移地址 0000H弹出并送入CS和IP,转而执行返 系统和 回DOS的指令INT20H。 ROM用
30 如何使用户程序执行完后返回来执行这条指令? 系统占用 INT 20H 程序段前缀 用户数据区 用户堆栈区 用户代码段 …… RET 系统和 ROM占用 DS,ES SS CS 首先将用户程序定义为一个远过程,当 可执行文件装入内存后,DS,ES两个段 寄存器被CPU自动设置为指向PSP的首 址,所以一般程序的开始指令为: PUSH DS MOV AX, 0 PUSH AX 即将DS的内容和0000H压入堆栈,程序 结束时的最后一条语句为RET,就把压 入堆栈的PSP段的段地址和偏移地址 0000H弹出并送入CS和IP,转而执行返 回DOS的指令INT 20H。 00H 00H PSPL PSPH 堆栈 情况