DOS系统功能调用

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

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

分两种,

re=view">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 ;假设不是1、2、3则继续输入字符
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

汇编 DOS的中断调用 INT 21H的更多相关文章

  1. 16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS

    ;以下是16位汇编 创建静态库,并调用静态库中的函数 ;多文件汇编格式 ;编译方法(此处用的是masm 5.0,如果是其他的编译器,有可能不能编译) ;第一种,编译方法 ;1.masm main.as ...

  2. DOS功能的调用

    DOS功能的调用:主要包含三方面的子程序:设备驱动(基本I/O),文件管理和其他(包括内存管理,自取时间,自取终端向量,总之程序等)随着DOS版本的升级,这种DOS功能调用的子程序数量也在不断的增加, ...

  3. int 21h 汇编

    INT 21H 指令说明及使用方法 转自http://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.html 很多初学汇编语言的同学可能会对INT ...

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

    很多初学汇编语言的同学可能会对INT 21H这条指令感到困惑,不知道是什么意思,下面就以一段简单的程序为大家讲解: 例如:需要键盘输入,并且回显. AH的值需要查表取得,表在下面 指令:      M ...

  5. Linux汇编与C互相调用

    一.简介 C语言调用汇编有两种方式:1.通过内嵌汇编  2.通过编译链接. 二.基础知识 对于C和汇编语言的接口主要有两个问题需要解决 1.调用者与被调用者的参数传递 正常的,定义一个函数总是希望它完 ...

  6. 80x86保护模式下IDT和中断调用过程分析

    80x86保护模式下IDT和中断调用过程分析 1.中断描述符表(IDT),将每个异常或中断向量分别与它们的处理过程联系起来.与GDT和LDT类似,IDT也是由8字节长度的描述符组成.IDT空描述符的存 ...

  7. 编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令包括 mov ax,4c00h 和 int 21h

    assume cs:code code segment mov bx,020H mov ds,bx mov bx,0 mov cx,63 s:mov [bx],bx inc bx loop s mov ...

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

    AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异步通迅输入 AL=输入数据 04 异 ...

  9. gcc O2优化选项对内嵌汇编以及函数递归调用的影响

    学习和使用c这些年来,很多方面都未深入研究过,就如脱离了IDE后,我可能连编译一个c文件的命令都写不出来. 最近需要在c中内嵌汇编解决问题,参考网上相关的资料写了一段汇编代码,在测试的时候时好时坏,找 ...

随机推荐

  1. 【angularJS】三个学习angulaJS的链接

    1.官方文档:https://code.angularjs.org/1.5.7/docs/api 2.A Better Way to Learn AngularJS:https://thinkster ...

  2. Node.js meitulu图片批量下载爬虫1.04版

    //====================================================== // https://www.meitulu.com图片批量下载Node.js爬虫1. ...

  3. C语言中的union使用方法

    union共用声明和共用一变量定义: "联合"是一种特殊的类,也是一种构造类型的数据结构.在一个"联合"内能够定义多种不同的数据类型. 一个被说明为该" ...

  4. HDU 3917 Road constructions(最小割---最大权闭合)

    题目地址:HDU 3917 这题简直神题意... 题目本身就非常难看懂不说..即使看懂了.也对这题意的逻辑感到无语...无论了.. 就依照那题意上说的做吧... 题意:给你n个城市,m个公司.若干条可 ...

  5. 压测过程中,CPU和内存占用率很高,案例简单分析

    Q:  最近公司测试一个接口,数据库采用Mongo    并发策略:并发400个用户,每3秒加载5个用户,持续运行30分钟    数据量:8000条左右 压测结果发现:    TPS始终在5左右   ...

  6. (五)EasyUI使用——datagrid数据表格

    DataGrid以表格形式展示数据,并提供了丰富的选择.排序.分组和编辑数据的功能支持.DataGrid的设计用于缩短开发时间,并且使开发人员不需要具备特定的知识.它是轻量级的且功能丰富.单元格合并. ...

  7. asp.net+mvc+easyui+sqlite 简单用户系统学习之旅(七)—— 添加用户到数据库-obj转json

    这一节讲一下如何添加用户名和密码到已建的sqlite.db数据库中. 当在datagrid的toolbar中输入用户名.密码,然后点击添加按钮时,将该用户加入数据库,并显示出来.datagrid表格里 ...

  8. Spark学习(一) 基本操作

    先来一个简单的spark小程序,这是官网上的小样例,目的就是统计spark以下的README文档中包括字母a和字母b的个数,然后 打印,代码例如以下: object BasicStandaloneAp ...

  9. 数据库性能优化之SQL语句优化1

    一.问题的提出 在 应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实 际应用后,随着数据库中数据的增加, ...

  10. poj 2828 Buy Tickets (线段树 单节点 查询位置更新)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 15533   Accepted: 7759 Desc ...