1、 (1)Window XP Professor (2)MASM6.11开发软件三、实验步骤 1、将Masm6.11安装程序拷贝到D盘根目录下,并执行d:Masm611目录下Setup.exe文件,按照安装提示将程序安装到C盘根目录。 2、将C:masm611Bin目录下的所有文件拷贝到C:Masm611binr目录下,将C:Masm611help目录下的所有文件拷贝到c:Masm61binr目录下。 3、执行C:Masm611Binr目录下的pwb.exe文件,打开开发环境。 4、在PWB编辑窗口中输入实验1.1中的程序,并保存为test.asm文件。 5、执行Project菜单下New Pr
2、oject子菜单创建一个新的工程文件,并命名为test.mak,将test.asm文件加入到该工程文件中。 6、执行Project下Build子菜单编译连接该工程文件,并运行该可执行程序,观察程序执行的结果。 7、执行Run菜单下Debug子菜单,进入调试环境。 8、在程序的如下位置设置断点,并按要求观察寄存器堆栈或者内存单元的值。Data segment Msgl db please input the number of student:$ Num db 0 EnMsg db 0ah,0dh,$ Msg2 db please input the grade of each student:
3、 Msg3 db the average grade of these student is: avg db 0 ascavg db 0,0,Data endsStack segment para stack db 20h dup(0)Stack endscode segment Assume Cs:code,Ss:stack,ds:DataStart: mov ax,data mov ds,ax lea dx,Msgl ;此行设置断点,观察DS所指示的数据段的情况 mov ah, 09h int 21h Call Numproc ;此行设置断点,观察屏幕输出,并观察堆栈的变化 mov num
4、,bl ;此行设置断点,观察bl的值,并观察堆栈的变化 lea dx,EnMsg mov ah,09h int 21h lea dx,Msg2 call Avgproc ;此行设置断点,观察屏幕输出信息 lea dx,EnMsg ;此行设置断点,观察avg所对应的存储单元的值lea dx, Msg3 call bta ; mov ah,4ch ;此行设置断点,观察ascavg所对应的存储单元的值及屏 ;幕输出信息Numproc proc push ax push cx push dx mov bl,0 lop1: mov ah,01h int 21h ;设置断点观察al寄存器的值 cmp al
5、,0dh jz lop2 cmp al,0 jl lop1 cmp al, 9 ja lop1 sub al,30h mov cl,al mov al,bl mov ch,10 mul ch mov bl,al ; add bl,cl ;设置断点观察bl寄存器的值 jmp lop1 lop2: pop dx pop cx pop ax retNumproc endpAvgproc proc xor dx,dx ;设置断点观察堆栈值的变化 mov cl,num ;设置断点观察cl寄存器的值lop3: call Numproc xor ax,ax add ax,dx Div num add avg
6、,al ;设置断点观察avg存储单元的值 xor dx,dx mov dl,ah sub cl,1 jnz lop3 pop ax ; pop cx ret ; Avgproc endp bta proc push ax ; push bx mov al,avg mov bl,10 div bl add ah,30h ;设置断点观察ax寄存器的值 add al,30h mov ascavg ,al ;设置断点观察ascavg存储单元的值 mov ascavg+1,ah lea dx,EnMsg lea dx,ascavg ;设置断点观察dx寄存器的值 mov ah,09h pop bx bta
7、 endp code ends end start 9、按照程序的执行过程绘制出程序流程图。开始 输入数据(调用Numproc、Avgproc)求平均值调用把bta并输出结果结束四、实验结果及其分析 1.实验结果2.断点(1) lea dx,Msgl ;(2)Call Numproc (输入人数) ;输入人数3。由寄存器和内存可知BX为3,即为输入人数,内存中181B:0125为num地址,其值为3.mov cl,num ;观察CX发现CL的值为3。(3)Call Numproc (输入成绩) ;此时屏幕提示输入学生成绩。输入成绩:3-1 输入87:图1:将输入数字8存入BL中。图2:(AL)
8、-(BL)图3:(CL)+(BL)-(BL) add bl,cl图4:输入7,(BL)-(AL),(AL)*10-(BL)。图5:(BL)+(CL)- 输入87后avg的值:观察内存,地址为181B:0178的avg值为1DH,其十进制数为29,即87/3=29。3-2 输入77:输入7,已将AL值赋值给CL (CL)=7。int 21h;AL值。输入7之后(BL)-(AL)add bl,cl图6:AL值输入77后avg值:0178的avg值为36H,其十进制数为54,即29+77/3=54。3-3 输入92:输入9,已将AL值赋值给CL (CL)=9。输入2之后(BL)-输入92后avg的值
9、:(4)调用bta前屏幕输出:0178的avg值为55H,其十进制数为85,即54+94/3=85。(5)调用bta压栈操作清零AX。(6) 观察avg与AX的值:地址为181B:0178的avg值为55其十进制数为85;(AL)为38H,(AH)为35H。分别为字符8,字符5。(7)分别将AL,AH的值放入ascavg中,观察知首地址为181B:0179的ascavg第一字节为(AL),第二字节为(AH),即ascavg0为8,ascavg1为5。五、结论通过本次实验我学习并掌握了如何使用MASM6.11开发软件来创建一个汇编语言程序,并对开发环境中一些环境境变量进行设置,建立工程,编译运行程序,设置环境,利用错误提示修改程序,设置和编辑断点,查看寄存器、存储单元以及变量的值等内容。 本次实验的经验及教训:一定要注意源程序的保存路径,否则无法运行结果。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1