int 21 h中断例程是DOS提供的中断例程,其中包含了DOS提供给程序员在编程时调用的子程序。
我们前面一直使用的是int 21 h中断例程的4ch号功能,即程序返回功能,如下:
int 21h 中断例程的 4ch 号功能是程序返回功能 mov ah , 4ch ; 程序返回 mov al , 0 ; 返回值 int 21h
(ah)=4ch 表示调用第 21h 号中断例程的 4ch 号子程序,功能为程序返回,可以提供返回值作为参数。
我们前面使用这个功能的时候经常写做:
mov ax,4c00h int 21h
我们看一下int 21 h中断例程在光标位置显示字符串的功能:
ds:dx指向字符串 ;要显示的字符串需用”S',作为结束符 mov ah,9 ;功能号9,表示在光标位置显示字符串 int 21h
(ah)=9表示调用第21h号中断例程的9号子程序,功能为在光标位置显示字符串,可以提供要显示字符串的地址作为参数。
编程:在屏幕的S行12列显示字符串“Welcome to masm! "。
assume cs:code data segment db 'Welcome to masm!' , '$' ; 汇编中字符串还是单个字符用"或者'围起来都一样 ; db "Welcome to masm!" , '$' data ends code segment start: mov ah , 2 ; 设置光标位置 mov bh , 0 mov dh , 12 mov dl , 32 int 10h mov ax , data mov ds , ax mov dx , 0 ; 设置待显示字符串位置,这个中断中要用dx来存放偏移 mov ah , 9 ; 功能号9显示字符串 ; mov bl , 11001010b ;21h中不能设置颜色了都 int 21h mov ax , 4c00h ; 调用4ch号功能,返回值0 int 21h code ends end start
上述程序在屏幕的5行12列显示字符串“Welcome to masm! ",直到遇见“$”“$”本身并不显示,只起到边界的作用)。
如果字符串比较长,遇到行尾,程序会自动转到下一行开头处继续显示;如果到了最后一行,还能自动上卷一行。
DOS为程序员提供了许多可以调用的子程序,都包含在int 21h中断例程中。我们这里只对原理进行了讲解,对于DOS提供的所有可调用子程序的情况,读者可以参考相关的书籍。