8.1、简述中断和子程序调用之间的主要区别?
8.2、为什么要区分IRET指令与RET指令?
8.3、编写一个子程序,它可显示以0结尾的字符串。子程序的入口参数DS:DX为待输出字符串的首地址。
8.4、编写一个子程序,用来读入一个键,并在屏幕上按十六进制的形式显示按键的扩展ASCII码,如果按键为普通字符,则不显示。
8.5、编写一个程序,在屏幕的右下角闪烁显示编程者自己的姓名,显示颜色自定。
8.6、编写一个把屏幕上显示的字母经过大小写转换后再显示的程序。
8.7、编写一个程序,它把屏幕上的数字改位蓝绿色背景的红字。
8.8、编写一个控制光标位置和形状的程序,该程序具有以下功能:
1)、可用光标移动键↑、↓、←和→来移动光标;
2)、当光标已在第0列,且按'←'键时,光标定在上一行的最后一列;若已在屏幕的左上角,则光标不动,且给出响铃;按'→'键时的边界处理类似;
3)、当光标在第0行,且按'↑'键时,则光标不动,且给出响铃;按'↓'键时的边界处理类似;
4)、按Home或End键,则光标移到当前行的行首或行尾;
5)、若按下数字或字母键,则把该字符从当前位置依次显示到屏幕顶(在新位置显示字符时,原位置的符号被抹去);
6)、按Esc键,程序结束。
8.9、交换例8.5和8.6的画线方法,编写相应的子程序VLine和HLine,并验证之。
8.10、假设显示器的显示模式设定为12H,编写实现下列功能的程序:
1)、在屏幕中间从上到下显示一条明亮的蓝色线,线宽为1个像素;
2)、在屏幕底下横向画一条绿色线,线宽为2个像素;
3)、在屏幕上垂直显示16种颜色,每种颜色宽40个像素;
4)、设定屏幕背景为白色,在屏幕中间画一条青色线,线宽为10个像素。
8.11、对于256色,320X200的显示模式需要多少个字节的内存存放一屏信息?
8.12、为什么在显示数据时必须关闭鼠标?
8.13、编写程序,检测计算机是否已安装了鼠标,并以显示Yes/No来表示检测结果。
8.14、编写程序,显示鼠标的按键,若按左键,显示"Left",若按右键,显示"Right",按Esc键,程序结束。
8.15、编写一个程序,在图形模式下,打开鼠标,并显示鼠标的位置。
8.16、编写一个程序,显示驱动器C根目录下所有EXE文件。提示:用通配符"*.exe"来查找与此匹配的文件名,找到后,显示之。
8.17、编写一个程序,显示驱动器C根目录下的所有子目录。
8.18、编写一个程序,设置指定目录下的所有文件为只读文件。
8.19、编写一个程序,创建一个隐含文件Data.TXT。
8.20、编写一个程序,把键盘上输入写入文件File.dat中,类似以下DOS命令:
COPY con File.dat
8.21、使用哪个DOS功能可读取中断向量地址,哪个DOS功能可把新的中断服务程序地址设置为指定中断的入口地址。
8.22、编写一个程序,在程序开始运行时,把中断向量表保存到程序的数据段中,在程序结束前把数据段中的备份恢复到系统中去。
8.23、把下列C语言的子程序改写成汇编语言子程序。
1)、取当前光标的位置,并分别存入变量x和y中
get_cursor(int *x, int *y)
{union REGS in, out;
in.h.ah = 3; in.h.bh = 0;
int86(0x10, &in, &out);
*x = out.h.dh; *y = out.h.dl;
}
2)、把光标设置在(row, col)位置
locate(int row, int col)
{union REGS in, out;
in.h.ah = 2; in.h.bh = 0;
in.h.dh = row; in.h.dl = col;
int86(0x10, &in, &out);
}
3)、在(row, col)位置显示字符串string
disp_string(int row, int col, char string[])
{struct REGPACK in, out;
int x, y;
get_cursor(&x, &y);
locate(row, col);
in.r_ds = FP_SEG(string);
in.r_dx = FP_OFF(string);
in.r_ax = 0x900;
intr(0x21, &in);
locate(x, y);
}