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

一、基本知识

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

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

二、常用的DOS功能调用

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

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

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

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

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

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

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

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

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

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

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

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

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

MOV AH,4CH  ;或MOV  AX,4C00H
INT 21H 

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

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

MOV AH,4CH  ;或MOV  AX,4C00H
INT 21H

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

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

40号功能输出字符串:

DATA SEGMENT
    HM  DB 'hello yuanlifu!',0DH,0AH;显示字符串
    LM  EQU $-HM ;$在表达式中,表示当前地址
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:  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 21H

CODE    ENDS
END START

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

DATAS  SEGMENT
     STRING  DB  'hello yuanlifu!!','$';显示字符串
DATAS  ENDS

CODES  SEGMENT
     ASSUME    CS:CODES,DS:DATAS
START:
     MOV  AX,DATAS
     MOV  DS,AX
     LEA  DX,STRING
     MOV  AH,9
     INT  21H

     MOV  AH,4CH
     INT  21H
CODES  ENDS
    END   START

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

DATA SEGMENT
    HM DB 'hello liefyuan!',0DH,0AH,'$';显示字符串
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA

GO  PROC FAR
    PUSH DS
    MOV AX,0
    PUSH AX
    MOV AX,DATA
    MOV DS,AX
    MOV DX,OFFSET HM
    MOV AH,9
    INT 21H
    RET
GO  ENDP
CODE ENDS
    END GO

你可能感兴趣的:(asm)