实验内容
任务一:编写t1.asm,进行汇编,链接,运行。
(1)首先进行编译,编译成功后会生成 obj 文件,之后再链接,成功后生成可执行文件
(2)运行可执行文件:
结果输出了36;
(3)将t1程序中第四行的数字3和第九行的数字6分别改为5,7,再重新编译链接运行:
结果这样是输出了5和7;
(4)用debug进行调试,r命令显示个寄存器的值
cx=0016H,而DS和CS之间的确满足了CS=DS+10H;
(5)查看程序段前缀PSP的前两个字节是CD 20:
(6)使用 u 命令对 t1.exe 进行反汇编,再用t命令和p命令(遇到 int 命令时,用 p 命令)单步执行:
任务二
(1)编写 t2.asm ,进行汇编链接运行调试:
(2)清除屏幕后执行t2:
屏幕上打印了红色数字36;
(3)修改0433h为0432h以及0436h为0439h之后,再重新编译链接运行:
屏幕上打印了红色数字29;
(4)修改0433h为0333h以及0436h为0336h之后,再重新编译链接运行:
屏幕上打印了蓝色数字36;
延伸思考
(1)任务 2 和实验 1中的「实验任务(4)」都在屏幕上进行了打印输出,是因为它们都是向显存中写入了数据(A0000~BFFFF);
(2)任务1也同样在屏幕上显示输出,是通过给AH寄存器赋值,然后调用INT 21H指令,计算机就会根据AH寄存器中的值执行相应的操作。
总结与体会
初步了解了int 21H作为中断程序的功能,这个汇编指令是用于提供DOS系统功能调用。例如:
mov ah,4ch
int 21h
通过4CH功能调用能够结束当前正在执行的程序,返回DOS系统。