zoukankan      html  css  js  c++  java
  • 汇编 DOS的中断调用 INT 21H

    DOS系统功能调用

    这个汇编指令是用于提供DOS系统功能调用。

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


    分两种,DOS系统功能调用BIOS中断调用


    链接里都是一些经常使用的内容,大家能够自己去百度,一定比我这里给出的全面非常多,有那种DOS系统功能调用表

    调用步骤大致

    • (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:缓冲区首地址 缓冲区对应位置

    实例

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

    功能:返回DOS
    入口參数:无
    调用方法

           MOV    AH,4CH
           INT      21H

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

    键盘输入一个字符(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 ;假设不是123则继续输入字符
    ONE:   ......
    TWO:   ......
    THREE: ...... 

    输出显示一个字符(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。

    输出一个字符串(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

    从键盘输入一个字符串到缓冲区(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

  • 相关阅读:
    Java基础——链表的添加、移除、反转
    Java基础——数组队列的原理和实现
    Java基础——String、StringBuiler、StringBuffer的用法和区别
    Java基础——解决JFrame.setBackground设置无效,mac系统IDEA编译器
    Java基础——文件查找创建删除
    Java基础——Java异常机制
    线性表的操作
    Linux目录及文件系统操作
    Linux用户及文件权限管理
    Linux日志系统
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7255723.html
Copyright © 2011-2022 走看看