中断 INT 20H
来源:互联网 发布:zbar arm linux移植 编辑:程序博客网 时间:2024/05/22 11:42
DOS中断INT20H的功能是结束程序并返回DOS。
入口参数:CS=程序段前缀(PSP)的段地址。 IP=0000H。
出口参数:无。
问题: (1) 程序段前缀PSP的概念。
(2) 不能直接给CS、IP赋值,如何指定入口参数?
1、 程序的执行过程
//search out-->Build PSP in main memory-->loading-->set DS, ES (CS,SS)-->executing
在DOS提示符,如C:>下,键入一个可执行文件名(COM、EXE)后,在运行该程序前,DOS完成以下工作:
(1) 从磁盘中找到该文件。
(2) 检测用户可用内存,在可用内存的低地址段建立一个程序段前缀(PSP,Program Segment Prefix)。
(3) 把该文件从磁盘上装入内存中PSP的后面。
(4) DOS设置DS、ES的值等于PSP的段地址。如果该程序为COM文件,则把CS、SS的值也设置为PSP的段地址。
(5) 开始执行该文件的第一条指令。
2、 程序段前缀PSP
DOS运行程序时,需要该程序的一系列参数(如,程序结束地址、Ctrl_Break处理程序的地址、出错处理地址等),另外还需要一个磁盘读、写的缓冲区,这个参数区和缓冲区,称为"程序段前缀(PSP)"。 PSP共有256字节,它是运行程序时,由DOS自动在内存中建立的。 PSP的结构下图所示:
注意:
(1)、PSP起始两字节存放"INT 20H"指令的机器码(CDH 20H),该指令使程序返回DOS;
(2)、EXE程序刚运行时,DS和ES指向PSP首址,即INT20H指令的机器码:COM程序刚运行时,DS,ES,CS,SS均指向PSP首址。
在PSP结构中,我们只关心前两个字节,它是指令"INT 20H"的机器码(CDH、20H)。
3、 INT20H(结束程序的另一种方法)
例1、
;
;该程序在屏幕上显示一字符串"Hello,World!"。
;
DATA SEGMENT
Message DB 'Hello,World!', 0DH, 0AH, '$'
DATA ENDS
STACK SEGMENT STACK
DW 100H DUP (0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN PROC FAR
START:PUSH DS
MOV,AX,0
PUSH AX
MOV DX,OFFSET Message
MOV AH,09H
INT 21H
EXIT:RET
MAIN ENDP
CODE ENDS
END START
(1) 在程序执行前,DS=程序段前缀PSP的段地址,因此,
PUSH DS
MOV AX,0
PUSH AX
这三条指令,把PSP的段地址和0值推入堆栈。
(2) RET指令从堆栈中取出两字,送CS和IP,因此,RET指令执行时,CS=PSP的段地址,IP=0000H。CPU转移到PSP处执行。
(3) PSP处的指令是INT 20H,它的功能是结束程序并返回DOS,因此,该程序能正确返回DOS。
- 中断 INT 20H
- INT 10H中断
- INT 10H中断
- INT 10H中断
- 中断INT 21H
- INT 10H中断
- int 21h 中断
- INT 10H中断
- INT 10H 中断简介
- INT 10H 中断简介
- INT 10H 中断简介
- int 10h中断例程
- Dos 下 int 21h 软中断
- DOS下的int 10h中断
- 中断INT 13H的扩展功能
- INT 10H中断功能详解
- 【转载】DOS中断 INT 21H 大全
- x86 BIOS 中断 INT 10h
- java final 关键字
- 调试dhtmlscheduler浏览器兼容性问题
- 最大流算法实现
- 兼容IE和Firefox的设为首页和收藏的Javascript代码
- 呵呵
- 中断 INT 20H
- 用win7的启动菜单实现linux系统引导
- V$SQLTEXT,V$SQL,V$SQLAREA的区别
- 虚继承与虚基类的本质
- C# HttWebRequest 网页数据抓取是出现的错误情况
- 最简单安装JDK1.6+Tomcat6
- test
- sicily 1686
- quartz报错