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

系统功能调用——由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,程序转入相应的服务子程序,若按下其他键则会继续等待。

代码:

[plain]

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?”字符串。并且光标回车换行。

代码:

[plain]

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键结束。

<例子>:

[plain]

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容