DOS的功能调用(汇编语言实验)
- DOS操作系统的系统函数(功能)以中断服务程序形式提供,采用软件中断进行功能调用,使用寄存器传递参数
- 基本输入输出系统ROM-BIO,操作系统DOS和LINUX采用中断调用方式提供系统功能
DOS系统调用一般有如下4个步骤:
- 在AH寄存器中设置系统功能调用号
- 在指定寄存器中设置入口参数
- 用中断调用指令(INT 21H)执行功能调用
- 根据出口参数分析功能调用执行情况
DOS基本功能调用(INT 21H)
AH=01H,功能:输入一个字符,AL=输入字符的ASCII码;
AH=02H,功能:输出一个字符,DL=字符的ASCII码
AH=09H,功能:输出一个字符串,DX=字符串地址($结尾)
AH=4CH,功能:程序执行结束,AL=返回代码
例:这是其中AH=09H的功能.
;class001.asm in DOS
;程序的存储模型(Memory Model)
.model small ;程序的存储模型
;存储模型决定一个程序的规模,
;也确定进行子程序调用,指令转移和数据访问的缺省属性
;须有存储模型语句,且位于简化段定义之前
;.MODEL 存储模型,语言类型
;创建运行于DOS操作系统下的应用程序
;根据需要选择前6种模型
;一般小型程序选用SMALL模型
;逻辑段的简化定义
;堆栈段定义伪指令.STACK创建一个堆栈段
.stack ;定义堆栈段(默认1KB)
;默认是1KB空间
;堆栈段名是:STACK,用@STACK预定义操作符
;数据段定义伪指令.DATA,用@DATA预定义操作符
.data ;定义数据段
;数据段名是:_DATA,用@DATA预定义操作符
;数据定义(数据待填)
msg1 db 'Hello,Assembly!',13,10,'$' ;定义要显示的字符串
;代码段定义伪指令.CODE创建一个代码段
.code ;定义代码段
;代码段名是:_TEXT,用@CODE预定义操作符
.startup ;程序执行起始
;指明本程序开始执行的位置
;使DS等于用.DATA伪指令定义的数据段基地址
;MASM汇编程序
;根据程序的起始位置设置代码段的CS(代码段寄存器)和IP(指令指针)值
;根据堆栈大小设置堆栈段的SS(堆栈段寄存器)和SP(堆栈指针)值
;但没有设置DS(数据段寄存器)和ES(附加段寄存器),以及FS(附加段寄存器)和GS(附加段寄存器)值
;主程序(指令待填)
mov dx,offset msg1 ;指定字符串偏移地址
mov ah,9 ;AH赋值9
int 21h ;功能调用显示信息
.exit ;程序正常执行结束
;子程序(指令待填)
end ;汇编结束