Avgproc endp bta proc
push ax ;设置断点观察堆栈值的变化 push bx xor ax,ax
mov al,avg mov bl,10 div bl
add ah,30h ;设置断点观察ax寄存器的值 add al,30h
mov ascavg ,al ; mov ascavg+1,ah lea dx,EnMsg mov ah,09h int 21h
lea dx,ascavg mov ah,09h int 21h pop bx pop ax ret bta endp code ends end start
设置断点观察ascavg存储单元的值 dx寄存器的值 第 4 页
;设置断点观察
9、按照程序的执行过程绘制出程序流程图。
开始 调用09h系统调用功能,输出Msg1的内容到屏幕上 输入学生人数,调用子程序Numproc统计学生的人数 调用09h系统调用功能, 输出Msg2的内容到屏幕上 ,输入学生成绩 调用子程序Avgproc统计学生的平均成绩,结果放在avg中 调用子程序bta对平均成绩的ASCALL码化,输出平均成绩在屏幕上 结束
四、实验结果及其分析
1.第一次按下f5后,程序跳至第零个断点处 DS所指示的数据段:
2.第二次按下f5后,程序跳至第一个断点处 屏幕的输出: 堆栈的变化:
3.第三次按下f5后,程序跳至第七个断点处
第 5 页
al的值: al=5BH
4.第四次按下f5后,程序跳至屏幕,输入学生数目1,然后跳至第八个断点处 al的值: al=00H
5.第五次按下f5后,程序跳至第九个断点处 bl的值:
bl=00H
6.第六次按下f5后,程序跳至第七个断点处 al的值: al=00H 7.第七次按下f5后,程序跳至屏幕输出:
8.按下回车后,程序跳至第二个断点 bl的值: bl=01H 堆栈值的变化:
9.第八次按下f5后,程序跳至第三个断点处 屏幕的输出为:
10.第九次按下f5后,程序跳至第十个断点处 堆栈值的变化:
11.第十次按下f5后,程序跳至第十一个断点处 cl的值: cl=00H
12.第十一次按下f5后,程序跳至第七个断点处 al的值:
al=5BH
13.第十二次按下f5后,程序跳至屏幕,输入学生成绩1,然后跳至第八个断点处 al的值: al=00H
14.第十三次按下f5后,程序跳至第九个断点处 bl的值:
bl=00H
15.第十四次按下f5后,程序跳至第七个断点处 al的值:
al=00H
16.第十五次按下f5后,程序跳至屏幕输出:
按下回车后,程序跳至第十二个断点 avg存储单元的值: avg=00
第 6 页
17.第十六次按下f5后,程序跳至第十三个断点 avg存储单元的值:avg=01
18.第十七次按下f5后,程序跳至第十四个断点
堆栈值的变化:
19.第十八次按下f5后,程序跳至第四个断点 avg存储单元的值:avg=01
20.第十九次按下f5后,程序跳至第五个断点 屏幕的输出为:
21.第二十次按下f5后,程序跳至第十五个断点 堆栈值的变化:
22.第二十一次按下f5后,程序跳至第十六个断点 ax寄存器的值:
23.第二十二次按下f5后,程序跳至第十七个断点 ascavg存储单元的值: ascavg=00
24.第二十三次按下f5后,程序跳至第十八个断点
dx寄存器的值:
25.第二十四次按下f5后,程序跳至第六个断点
第 7 页
ascavg存储单元的值:ascavg=30
屏幕
的输出为:
26.第二十五次按下f5后,程序跳至初始状态
五、结论
通过本次实验,学会了汇编语言开发工具的基本功能及基本使用方法及工程的建立、程序的调试等等。
第 8 页