汇编--学习笔记(四)-DOS功能调用

来源:互联网 发布:seo诊断seo8 编辑:程序博客网 时间:2024/06/01 08:53

一、基本知识

 DOS 功能调用是指汇编程序通过INT 21H软中断来调用DOS内部子程序完成特定的一系列操作的一种方法。
 在学习和使用汇编语言过程中,用户不可能,也没有必要从最底层的第一个操作开始。例如打印字符串,若所有工作都由用户程序去做,是不现实的。而调用系统已有的程序就是一种有效的方法。而DOS功能调用就提供了这种方法。
1、调用方法
 调用前将功能号送AH寄存器,同时根据功能号规定的要求准备好所有的参数,然后执行INT 21H。
 例如:显示一个字符‘A’

MOV DL,41H  ;字符‘A’的ASCII码41HMOV AH,02HINT 21H

二、常用的DOS功能调用

1、“1号功能”–1H功能调用—-从键盘读入一个字符

MOV AH,01HINT 21H   ;读入的字符在AL寄存器

2、“2号功能”–2H功能调用—-显示器输出一个字符

MOV DL,字符  ;ASCII码,例如:41H;MOV    DL,41H  ;输出‘A’,方法一;MOV    DL,'A'  ;输出‘A’,方法二MOV AH,02HINT 21H

3、“9号功能”–9H功能调用—-显示器输出一串字符

DS  指向字符串所在的段   ;一般不必显式地装入DX  指向字符串串首的位移  ;例如:MOV DX,OFFSET HMMOV AH,09HINT 21H

说明:
 要求字符串必须以’$’作结束标志,回车换行用0DH,0AH。例如:

HM DB  'hello world',0DH,0AH,'$'  ;在数据段定义

4、“40号功能”–40H功能调用—-显示器输出一串字符

DS  指向字符串所在的段   ;一般不必显式地装入DX  指向字符串串首的位移  ;例如:MOV DX,OFFSET HM--位移用OFFSETCX  为字符串长度BX  送入1MOV AH,40HINT 21H

说明:
字符串不必以’$’作结束标志,回车换行用0DH,0AH但应给出字符串长度。例如:
比较:
 与9号功能比较,40号功能多两个参数,但是不必美元符结束。

HM DB  'hello world',0DH,0AH,'$'  ;在数据段定义

5、4CH功能调用—-结束程序

MOV AH,4CH  ;或MOV  AX,4C00HINT 21H 

三、结束程序返回DOS的方法

1、在COM文件或DEBUG下
 所写程序可以用INT 20HINT 3H结束程序。
2、在汇编源程序中
(1)可用 4CH 功能调用结束程序。例如:

MOV AH,4CH  ;或MOV  AX,4C00HINT 21H

(3)可用RET结束程序
但必须将执行模块定义为过程。例如:

P1  PROC FAR    PUSH AX    MOV  AX,02H    ADD  AX,05H    RETP1  ENDP......END P1

40号功能输出字符串:

DATA SEGMENT    HM  DB 'hello yuanlifu!',0DH,0AH;显示字符串    LM  EQU $-HM ;$在表达式中,表示当前地址DATA ENDSCODE SEGMENT    ASSUME CS:CODE,DS:DATASTART:  MOV AX,DATA        MOV DS,AX   ;装入数据段寄存器        MOV DX,OFFSET HM        MOV CX,LM    ;字符长度        MOV BX,01H   ;规定BX送1        MOV AH,40H   ;40H功能调用        INT 21H        MOV AH,4CH   ;结束程序        INT 21HCODE    ENDSEND START

9号功能输出字符串–方法一:

DATAS  SEGMENT     STRING  DB  'hello yuanlifu!!','$';显示字符串DATAS  ENDSCODES  SEGMENT     ASSUME    CS:CODES,DS:DATASSTART:     MOV  AX,DATAS     MOV  DS,AX     LEA  DX,STRING     MOV  AH,9     INT  21H     MOV  AH,4CH     INT  21HCODES  ENDS    END   START

9号功能输出字符串–方法二

DATA SEGMENT    HM DB 'hello liefyuan!',0DH,0AH,'$';显示字符串DATA ENDSCODE SEGMENT    ASSUME CS:CODE,DS:DATAGO  PROC FAR    PUSH DS    MOV AX,0    PUSH AX    MOV AX,DATA    MOV DS,AX    MOV DX,OFFSET HM    MOV AH,9    INT 21H    RETGO  ENDPCODE ENDS    END GO