用INT 21H 的A号功能,输入一个字符串“Hello, world!”,存放在内存,然
后倒序输出。
在DOS中断中,INT 21H是一个常用的系统功能调用中断,它提供了多种功能,其中A号功能用于字符串的输入。
在使用这个功能时,通常需要设置一个缓冲区来存储输入的字符串。
缓冲区的格式是特定的:
第一个字节通常表示缓冲区的大小,即可以存储的最大字符数(包括最后的回车符);
第二个字节在接收到字符串后将放置实际输入字符串的大小(不包括回车符);
字符串的内容从第三个字节开始存储。
当程序调用INT 21H的A号功能时,它会等待用户从键盘输入字符串;
用户输入的字符串将被存储在之前设置的缓冲区中(从第三个字节开始);
同时,缓冲区的第二个字节会被更新为实际输入的字符数(不包括回车符)。
ds:dx=缓冲区首地址
定义数据段:
data segmentbuffer db 200,?,200 dup (?)
data ends
输入123后的数据段:
其他程序细节看代码注释:
data segmentbuffer db 200,?,200 dup (?)
data endsstack segment stacktop label worddw 30h dup (?)
stack endscode segmentassume ds:data,ss:stack,cs:code
main proc far;初始化数据段mov ax,datamov ds,ax;初始化堆栈段mov ax,stackmov ss,axlea sp,top;把缓冲区首地址传给dxlea dx,buffer;调用a号功能输入字符串mov ah,0ahint 21h;实际输入字符串字数(不含回车)会放在缓冲区首地址+1(第二个字节)的位置mov bx,dx;cx作为循环计数器,先清零mov cx,0;再用cx的低8位cl取出[bx+1]的内容,即字符数mov cl,[bx+1];si作为逆序输出的偏移量,需要加首地址的基础上+1 -> 因为存放字符串是从缓冲区第三个字节开始mov si,cxadd si,bxinc si;逆序输出字符串
next:mov dl,[bx+si]mov ah,2int 21hdec siloop nextmov ah,4chint 21h
main endp
code endsend main