1、汇编实验报告汇编语言程序设计实 验 报 告院 系 信息科学与技术学院 专 业 软件工程 年 级 2011 学 号 20112754 姓 名 尚孟昕 西南交通大学信息科学与技术学院年 月 日实验一 Masm6.11的使用方法一、实验目的1、创建一个新的汇编语言程序,熟练掌握汇编语言开发工具的使用方法,并对开发环境中一些坏境变量进行设置。2、创建一个工程文件,对该工程文件进行编译,连接,并运行;3、对建立的工程文件进行调试,在运行过程中查看各个寄存器的值,内存单元的值等。二、实验环境该试验包括的硬件和软件条件如下:1、硬件环境 (1)Intel Core Duo CPU P8700 (2)内存4G
2、2、软件环境 (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菜单下
3、New Project子菜单创建一个新的工程文件,并命名为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 st
4、udent:$ 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 ;此行设置断点,观察屏幕输出,并观察堆栈的变
5、化 mov num,bl ;此行设置断点,观察bl的值,并观察堆栈的变化 lea dx,EnMsg mov ah,09h int 21h lea dx,Msg2 mov ah,09h int 21h call Avgproc ;此行设置断点,观察屏幕输出信息 lea dx,EnMsg ;此行设置断点,观察avg所对应的存储单元的值 mov ah,09h int 21hlea dx, Msg3 mov ah,09h int 21h call bta ;此行设置断点,观察屏幕输出信息 mov ah,4ch ;此行设置断点,观察ascavg所对应的存储单元的值及屏 ;幕输出信息 int 21hNum
6、proc proc push ax push cx push dx lea dx,EnMsg mov ah,09h int 21h mov bl,0 lop1: mov ah,01h int 21h ;设置断点观察al寄存器的值 cmp al,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 ;设置断点观察al寄存器的值 add bl,cl ;设置断点观察bl寄存器的值 jmp lop1 lop2: pop dx pop cx pop
7、ax retNumproc endpAvgproc proc push ax push cx xor dx,dx ;设置断点观察堆栈值的变化 mov cl,num ;设置断点观察cl寄存器的值lop3: call Numproc xor ax,ax mov al,bl add ax,dx Div num add avg,al ;设置断点观察avg存储单元的值 xor dx,dx mov dl,ah sub cl,1 jnz lop3 pop ax ;设置断点观察avg存储单元的值 pop cx ret ;设置断点观察堆栈值的变化 Avgproc endp bta proc push ax ;设
8、置断点观察堆栈值的变化 push bx xor ax,ax 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 mov ah,09h int 21h lea dx,ascavg ;设置断点观察dx寄存器的值 mov ah,09h int 21h pop bx pop ax ret bta endp code ends end start 9、按照程序的执行过程绘制出程序流程图。开始 输入数据
9、(调用Numproc、Avgproc)求平均值调用把bta并输出结果结束四、实验结果及其分析 1.实验结果 2.断点(1) lea dx,Msgl ;此行设置断点,观察DS所指示的数据段的情况(2)Call Numproc (输入人数) ;此行设置断点,观察屏幕输出,并观察堆栈的变化输入人数3。由寄存器和内存可知BX为3,即为输入人数,内存中181B:0125为num地址,其值为3.mov cl,num ;设置断点观察cl寄存器的值观察CX发现CL的值为3。(3)Call Numproc (输入成绩) ;此行设置断点,观察屏幕输出,并观察堆栈的变化此时屏幕提示输入学生成绩。输入成绩:3-1 输
10、入87:图1:将输入数字8存入BL中。图2:(AL)-(BL)图3:(CL)+(BL)-(BL) add bl,cl图4:输入7,(BL)-(AL),(AL)*10-(BL)。图5:(BL)+(CL)-(BL) 输入87后avg的值:观察内存,地址为181B:0178的avg值为1DH,其十进制数为29,即87/3=29。3-2 输入77:图1:输入7,已将AL值赋值给CL (CL)=7。图2:(AL)-(BL)图3:int 21h;AL值。图4:输入7之后(BL)-(AL)图5:add bl,cl图6:int 21h;AL值输入77后avg值:观察内存,地址为181B:0178的avg值为3
11、6H,其十进制数为54,即29+77/3=54。3-3 输入92:图1:输入9,已将AL值赋值给CL (CL)=9。图2:(AL)-(BL)图3:int 21h;AL值。图4:输入2之后(BL)-(AL)图5:add bl,cl图6:int 21h;AL值输入92后avg的值:(4)调用bta前屏幕输出:观察内存,地址为181B: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