汇编常用的INT 21H系统调用

原创 2012年11月28日 21:13:14

系统功能调用——由DOS提供的一组实现特殊功能的子程序供程序员在编写自己的程序时调用,以减轻编程的工作量。

分两种,DOS系统功能调用BIOS终端调用

汇编语言中DOS系统功能调用有很多,涉及屏幕显示、文件管理、I/O管理等等,每个子程序都有一个功能号,所有的功能调用的格式都是一致的。调用的步骤大致如下

(1)系统功能号送到寄存器AH中;

(2)入口参数送到指定的寄存器中;

(3)INT 21H指令执行功能调用;

(4)根据出口参数分析功能调用执行情况。

下面归纳5个在汇编中常用的INT 21H系统功能调用。

 AH                          功能          入口参数     出口参数
4CH 返回DOS                 无          无
  1 键盘输入一个字符到AL中                 无         AL=字符
   2 输出DL寄存器的字符到显示器 DL(存放一个字符)           无
   9 输出一个以“$”结尾的字符串到显示器

DS:字符串所在的段地址

DX:字符串首地址

          无
0AH 从键盘输入一个字符串到指定缓冲区

DS:缓冲区所在的段地址

DX:缓冲区首地址

缓冲区相应位置

下面分别详细分析5种功能调用:

1、带返回码的结束(AH=4CH)

功能:返回DOS

入口参数:

调用方法

       MOV    AH,4CH

       INT      21H

通过4CH功能调用能够结束当前正在执行的程序,返回DOS系统,一般用于汇编程序的结束位置。

2、键盘输入一个字符(AH=1)

功能:从键盘输入一个字符到AL中,AL中为该字符的ASCII码。

入口参数:

调用方法

       MOV    AH,1

       INT      21H

执行完上面的系统调用后,出现提示输入光标,从键盘输入一个字符并保存其ASIIC码到AL寄存器中。

<例子>:交互式程序中用户按下数字键1,2,3,程序转入相应的服务子程序,若按下其他键则会继续等待。

代码:

KEY:  MOV  AH,1
      INT  21H  ;系统等待输入一个字符
      CMP  AL,'1'
      JE   ONE ;如果输入字符为1则跳到标识符ONE处执行
      CMP  AL,'2'
      JE   TWO ;如上解析
      CMP  AL,'3'
      JE   THREE
      JMP  KEY ;如果不是1、2、3则继续输入字符
ONE:   ......
TWO:   ......
THREE: ...... 

 

3、输出显示一个字符(AH=2)

功能:输出DL寄存器中的字符到显示器。

入口参数:被输出显示的字符或者字符ASCII码送到DL寄存器中

调用方法

        MOV       DL,字符码

        MOV       AH,2

        INT         21H

执行完上面的调用后,显示器显示出DL中的字符。

<例如>:

         MOV  DL,'6'  (也可以写成6的ASCII码36H,既:MOV   DL,36H)

         MOV   AH,2

         INT     21H

调用结果在屏幕上光标位置处显示6。

4、输出一个字符串(AH=9)

功能:输出显示一个以"$"字符结尾的字符串到显示器。

入口参数:DX=字符串偏移地址;DS=字符串的段地址

调用方法

       MOV     AX,字符串所在的段地址

       MOV     DS,AX

       MOV     DX,字符串的首址偏移地址

       MOV     AH,9

       INT        21H

执行上面调用,输出以DS:DX为首地址,"$"为结尾的字符串到显示器中。若要在显示字符串光标自动回车换行,则在"$"字符前面加上0DH(回车),0AH(换行)字符

<例子>:在屏幕上显示“HOW DO YOU DO?”字符串。并且光标回车换行。

代码:

DATA SEGMENT
  STR1 DB 'HOW DU YOU DO?',0DH,0AH,'$'
DATA ENDS

CODE SEGMENT
  ASSUME CS:CODE,DS:DATA
START:
      MOV AX,DATA
      MOV DS,AX
      MOV DX,OFFSET STR1;字符串首偏移地址放到DX中
      MOV AH,9
      NT 21H;输出字符串

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

5、从键盘输入一个字符串到缓冲区(AH=0AH)

功能:从键盘输入一串ASCII码字符到缓冲区,输入结束为缓冲区的个数或者“回车”字符。

入口参数:DX=缓冲区首偏移地址;DS=缓冲区段地址

调用方法

        MOV      AX,缓冲区的首址的段地址

        MOV      DS,AX

        MOV       DX,缓冲区的首址的偏移地址

        MOV      AH,0AH

        INT        21H

执行完上面调用,将从键盘接受字符串送到内存的输入缓冲区(由DS:DX指定缓冲区),要求预先定义一个缓冲区,缓冲区的第一个字节指定容纳的最大字符个数,由用户给出;第二个字节存放实际的最大字符个数,由系统最后添入;从第三个字节开始存放从键盘接受的字符,直到ENTER键结束。

<例子>:

DATA SEGMENT
    BUF   DB   20,         ;存放最大字符个数20个
            DB   ?,         ;存放实际输入字符个数
            DB   20 DUP(?)  ;存放输入字符
DATA ENDS
CODE SEGMENT
  ASSUME CS:CODE,DS:DATA
START:
   MOV   AX,DATA   ;缓冲区所在段基址
   MOV  DS,AX
   LEA  DX,BUF    ;缓冲区首址偏移地址
   MOV  AH,0AH
   INT  21H
        
   MOV  AH   4CH
   INT  21H
CODE ENDS
     END  START    


 

 

INT 21H

ECHO 就是指当你从键盘敲字符时,显示器会同时显示出来 --------------输出一个字符串用 21H 中断的09 函数-------------- INT 21H可以被用来向监视器传递A...
  • chenhq1991
  • chenhq1991
  • 2012年05月24日 20:12
  • 3602

DOS系统功能调用表(INT 21H)

DOS功能调用作者:    来源:互联网      ...
  • chinazeze
  • chinazeze
  • 2007年08月10日 09:51
  • 41209

INT 21H

INT 21H是指令自动转入中断子程序的入口 上面这句话很难理解吧,相信很多新手都看不懂在说什么。 下面我来举个例子: 以8086 CPU的汇编为例,输出一个字符串,就要使用如下指令: MOV...
  • Bill_Ming
  • Bill_Ming
  • 2012年02月29日 11:19
  • 7656

INT 21H 指令说明及使用方法

http://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.html 很多初学汇编语言的同学可能会对INT 21H这条指令感...
  • wjy397
  • wjy397
  • 2016年09月03日 10:31
  • 1459

汇编 DOS的中断调用 INT 21H

DOS系统功能调用这个汇编指令是用于提供DOS系统功能调用。它是由DOS提供的一组实现特殊功能的子程序供程序员在编写自己的程序时调用,以减轻编程的工作量。 分两种,DOS系统功能调用和BIOS中断调...
  • u013007900
  • u013007900
  • 2015年12月11日 20:44
  • 5341

汇编常用int 21H系统功能调用

今天犯了一个特别2的问题 用了很长时间 原因是没有理解到汇编中 int 21H 中的 2号命令 其实 int21H 中的2号命令还是挺简单的  要把它当成字符操作 也就是 ASC码 操作 我一直把它...
  • qq_23301703
  • qq_23301703
  • 2016年10月12日 20:08
  • 952

16位汇编 int 10h和int 21h 显示字符串实例

int 10h 的9号功能是显示字符串 assume cs:code code segment start: mov ah,2 ;置光标 mov bh,0 ;第0页 mov dh,...
  • SysProgram
  • SysProgram
  • 2016年09月03日 13:44
  • 1610

mov ah,1 int 21h

这两条指令是对DOS (磁盘操作系统)1 号功能的调用, 从键盘上输入一个字符,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。如果按下的是Ctrl+Break组合键,则终止程序执行...
  • qq_23301703
  • qq_23301703
  • 2016年10月12日 19:51
  • 1713

8086汇编基础 使用Int21h中断例程中的9号子程序实现hello world

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 assume cs:code data segment db 'hello wo...
  • yushaopu
  • yushaopu
  • 2016年07月25日 17:34
  • 1894

常用DOS(INT 21H)功能调用表

 AH功能调用参数返回参数00程序终止(同INT 20H)CS=程序段前缀 01键盘输入并回显 AL=输入字符02显示输出DL=输出字符 03异步通迅输入 AL=输入数据04异步通迅输出...
  • wongson
  • wongson
  • 2009年01月01日 19:35
  • 12769
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编常用的INT 21H系统调用
举报原因:
原因补充:

(最多只允许输入30个字)