[转载]DOS中断 之 1号中断 2号中断 9号中断 10号中断
2016-03-28 22:44阅读:
1.mov ah,01h
int 21h
功能:输入字符并回显
AL=键入字符的ASCII码
2.mov ah,02h
int 21h
功能:显示DL寄存器中的ASCII码对应的字符
DL=要显示字符的ASCII码
3.mov ah,09h
int 21h
功能:在屏幕显示以‘$’字符为结束的字符串
DS:DX指向字符串首地址的段地址和偏移量
Data segment
ring db ‘the lord of the
ring$’
Data ends
Code segment
Assume cs:code,ds:data
Start: mov ax,data
Mov ds,ax
Lea
dx,ring
Mov ah,09h
Int 21h
Mov ah,4ch
Int 21h
Code ends
End start
生成exe可执行文件
运行ring程序,输出字符串the lord of the ring
4.mov ah,0Ah
功能:程序运行后,在屏幕上接收键盘输入的字符串,然后存如某个指定的内存单元里
Data segment
Buf db 11
;这里的20为指定存放字符的个数(理论上的)
Db ?
;可变,实际存放字符的个数(系统自动计算)
Db 11 dup(?)
;这里的20是你在数据段开辟的空间
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
注意键盘缓冲区如何使用,以及其中每一个字节的含义
通过宏汇编编译
最终产生pp0a.exe
运行pp0a.exe
不难发现最多只能输入10个5(因为键盘缓冲区设定只能输入11个,最后一个安排给了回车键,故最多只能输入10个)
按回车后,无反应(因为没有输出啊),但内存单元里的内容是改了的,可以用debug来看运行后的内存变化,
反汇编
查看ds寄存器
buf 的显示是0B表示指定存放字符的个数
buf+1的显示是0A表示实际输入的个数是10个