1、汇编常用的 INT 21H 系统调用系统功能调用 由 DOS 提供的一组实现特殊功能的子程序供程序员在编写自己的程序时调用,以减轻编程的工作量。分两种,DOS 系统功能调用 和 BIOS 终端调用。汇编语言中 DOS 系统功能调用有很多,涉及屏幕显示、文件管理、I/O 管理等等,每个子程序都有一个功能号,所有的功能调用的格式都是一致的。调用的步骤大致如下:(1)系统功能号送到寄存器 AH 中;(2)入口参数送到指定的寄存器中;(3)用 INT 21H 指令执行功能调用;(4)根据出口参数分析功能调用执行情况。下面归纳 5 个在汇编中常用的 INT 21H 系统功能调用。AH 功能 入口参数 出
2、口参数4CH 返回 DOS 无 无1 键盘输入一个字符到 AL 中 无 AL=字符2 输出 DL 寄存器的字符到显示器 DL(存放一个字符) 无9 输出一个以“$”结尾的字符串到显示器DS:字符串所在的段地址DX:字符串首地址无0AH 从键盘输入一个字符串到指定缓冲区DS:缓冲区所在的段地址DX:缓冲区首地址缓冲区相应位置下面分别详细分析 5 种功能调用:1、带返回码的结束(AH=4CH)功能:返回 DOS入口参数:无调用方法MOV AH, 4CHINT 21H通过 4CH 功能调用能够结束当前正在执行的程序,返回 DOS 系统,一般用于汇编程序的结束位置。2、键盘输入一个字符(AH=1)功能
3、:从键盘输入一个字符到 AL 中,AL 中为该字符的 ASCII 码。入口参数:无调用方法MOV AH, 1INT 21H执行完上面的系统调用后,出现提示输入光标,从键盘输入一个字符并保存其 ASIIC 码到AL 寄存器中。:交互式程序中用户按下数字键 1,2,3,程序转入相应的服务子程序,若按下其他键则会继续等待。代码:1. KEY: MOV AH,1 2. INT 21H ;系统等待输入一个字符 3. CMP AL,1 4. JE ONE ;如果输入字符为 1 则跳到标识符 ONE 处执行 5. CMP AL,2 6. JE TWO ;如上解析 7. CMP AL,3 8. JE THRE
4、E 9. JMP KEY ;如果不是 1、2、3 则继续输入字符 10. ONE: . 11. TWO: . 12. THREE: . 3、输出显示一个字符(AH=2)功能:输出 DL 寄存器中的字符到显示器。入口参数:被输出显示的字符或者字符 ASCII 码送到 DL 寄存器中调用方法MOV DL,字符码MOV AH, 2INT 21H执行完上面的调用后,显示器显示出 DL 中的字符。:MOV DL,6 (也可以写成 6 的 ASCII 码 36H,既:MOV DL,36H)MOV AH, 2INT 21H调用结果在屏幕上光标位置处显示 6。4、输出一个字符串(AH=9)功能:输出显示一个以
5、“$“字符结尾的字符串到显示器。入口参数:DX=字符串偏移地址;DS=字符串的段地址调用方法MOV AX,字符串所在的段地址MOV DS, AXMOV DX, 字符串的首址偏移地址MOV AH, 9INT 21H执行上面调用,输出以 DS:DX 为首地址,“$“为结尾的字符串到显示器中。若要在显示字符串光标自动回车换行,则在“$“字符前面加上 0DH(回车 ),0AH(换行)字符。:在屏幕上显示“HOW DO YOU DO?”字符串。并且光标回车换行。代码:1. DATA SEGMENT 2. STR1 DB HOW DU YOU DO?,0DH,0AH,$ 3. DATA ENDS 4. 5
6、. CODE SEGMENT 6. ASSUME CS:CODE,DS:DATA 7. START: 8. MOV AX,DATA 9. MOV DS,AX 10. MOV DX,OFFSET STR1;字符串首偏移地址放到 DX 中 11. MOV AH,9 12. NT 21H;输出字符串 13. 14. MOV AH,4CH 15. INT 21H 16. CODE ENDS 17. END START 5、从键盘输入一个字符串到缓冲区(AH=0AH)功能:从键盘输入一串 ASCII 码字符到缓冲区,输入结束为缓冲区的个数或者“ 回车”字符。入口参数:DX=缓冲区首偏移地址;DS=缓冲区
7、段地址调用方法MOV AX,缓冲区的首址的段地址MOV DS,AXMOV DX,缓冲区的首址的偏移地址MOV AH,0AHINT 21H执行完上面调用,将从键盘接受字符串送到内存的输入缓冲区(由 DS:DX 指定缓冲区),要求预先定义一个缓冲区,缓冲区的第一个字节指定容纳的最大字符个数,由用户给出;第二个字节存放实际的最大字符个数,由系统最后添入;从第三个字节开始存放从键盘接受的字符,直到 ENTER 键结束。:1. DATA SEGMENT 2. BUF DB 20, ;存放最大字符个数 20 个 3. DB ?, ;存放实际输入字符个数 4. DB 20 DUP(?) ;存放输入字符 5. DATA ENDS 6. CODE SEGMENT 7. ASSUME CS:CODE,DS:DATA 8. START: 9. MOV AX,DATA ;缓冲区所在段基址 10. MOV DS,AX 11. LEA DX,BUF ;缓冲区首址偏移地址 12. MOV AH,0AH 13. INT 21H 14. 15. MOV AH 4CH 16. INT 21H 17. CODE ENDS 18. END START