Masm6.11的使用方法汇编语言程序设计最终版.doc
《Masm6.11的使用方法汇编语言程序设计最终版.doc》由会员分享,可在线阅读,更多相关《Masm6.11的使用方法汇编语言程序设计最终版.doc(50页珍藏版)》请在沃文网上搜索。
1、 实验一 Masm6.11的使用方法一、实验目的1、创建一个新的汇编语言程序,熟练掌握汇编语言开发工具的使用方法,并对开发环境中一些坏境变量进行设置。2、创建一个工程文件,对该工程文件进行编译,连接,并运行;3、对建立的工程文件进行调试,在运行过程中查看各个寄存器的值,内存单元的值等。二、实验环境该试验包括的硬件和软件条件如下:1、硬件环境 (1)Intel Core Duo CPU P8700 (2)内存4G2、软件环境 (1)Window XP Professor (2)MASM6.11开发软件三、实验步骤 1、将Masm6.11安装程序拷贝到D盘根目录下,并执行d:Masm611目录下S
2、etup.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 Project子菜单创建一个新的工程文件,并命名为test.mak,将test.asm文件加入到该工程文件中。 6、执行Project下Build子菜单编译连接该工程文件,并运行
3、该可执行程序,观察程序执行的结果。 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:$ Msg3 db the average grade of these student is:$ avg db 0 ascavg db 0,0,$Data endsStac
4、k 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 ;1此行设置断点,观察DS所指示的数据段的情况 mov ah, 09h int 21h Call Numproc ;2此行设置断点,观察屏幕输出,并观察堆栈的变化 mov num,bl ;3此行设置断点,观察bl的值,并观察堆栈的变化 lea dx,EnMsg mov ah,09h int 21h lea dx,Msg2 mov ah,09
5、h int 21h call Avgproc ;4此行设置断点,观察屏幕输出信息 lea dx,EnMsg ;5此行设置断点,观察avg所对应的存储单元的值 mov ah,09h int 21hlea dx, Msg3 mov ah,09h int 21h call bta ;6此行设置断点,观察屏幕输出信息 mov ah,4ch ;7此行设置断点,观察ascavg所对应的存储单元的值及屏幕输出信息 int 21hNumproc proc push ax push cx push dx lea dx,EnMsg mov ah,09h int 21h mov bl,0 lop1: mov ah,
6、01h int 21h ;8设置断点观察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 ;9设置断点观察al寄存器的值 add bl,cl ;10设置断点观察bl寄存器的值 jmp lop1 lop2: pop dx pop cx pop ax retNumproc endpAvgproc proc push ax push cx xor dx,dx ;11设置断点观察堆栈值的变化 mov cl,num
7、;12设置断点观察cl寄存器的值lop3: call Numproc xor ax,ax mov al,bl add ax,dx Div num add avg,al ;13设置断点观察avg存储单元的值 xor dx,dx mov dl,ah sub cl,1 jnz lop3 pop ax ;14设置断点观察avg存储单元的值 pop cx ret ;15设置断点观察堆栈值的变化 Avgproc endp bta proc push ax ;16设置断点观察堆栈值的变化 push bx xor ax,ax mov al,avg mov bl,10 div bl add ah,30h ;17
8、设置断点观察ax寄存器的值 add al,30h mov ascavg ,al ;18设置断点观察ascavg存储单元的值 mov ascavg+1,ah lea dx,EnMsg mov ah,09h int 21h lea dx,ascavg ;19设置断点观察dx寄存器的值 mov ah,09h int 21h pop bx pop ax ret bta endp code ends end start 9、按照程序的执行过程绘制出程序流程图。四、实验结果及其分析 1、安装后的程序 图1.1安装成功2、将bin和help文件夹中的所有文件拷备到binr中 图1.2 Binr文件夹3、4开
9、PWB并建立t11.asm文件图1.3 建立t11.asm文件5、建立t11工程文件,并将t11.asm包含其中 图1.4 建立t11.mak 图1.5 将t11.asm添加到t11.ask中6、编译并运行 图1.6 编译成功 图1.7 运行结果7、进入调试环境 图 1.8 调试界面8、设置断点并观察 图1.9 设置断点界面(1)、lea dx,Msgl ;此行设置断点,观察DS所指示的数据段的情况图1.10 ds数据段地址及内容(2)、Call Numproc ;2此行设置断点,观察屏幕输出,并观察堆栈的变化 图1.11 屏幕输出 图1.12 堆栈变化 (3)mov num,bl 观察bl的
10、值并观察堆栈的变化 图1.13 bl02h 图1.14 堆栈变化(4)、call Avgproc ; 观察屏幕输出信息 图1.15 屏幕输出(5)、 lea dx,EnMsg ;5此行设置断点,观察avg所对应的存储单元的值 图1.16 avg对应的内存单元值03h (6)、call bta ;6此行设置断点,观察屏幕输出信息 图 1.17 屏幕输出(7)、 mov ah,4ch ;7此行设置断点,观察ascavg所对应的存储单元的值及屏幕输出信息图1.18 ascavg对应的内存单元值30h,33h 图 1.19 屏幕输出(8)、 int 21h ;8设置断点观察al寄存器的值1. al=E
11、Fh2. al=00h3. al=EFh4. al=00h5. al=01h6. al=00h图 1.20 ax寄存器 (9)、mov bl,al ;9设置断点观察al寄存器的值 al=00h al=00h al=00h图1.21 al值 (10)、 add bl,cl ;10设置断点观察bl寄存器的值 bl=00h bl=00h bl=00h图1.22 bl值 (11)、xor dx,dx ;11设置断点观察堆栈值的变化 图1.23 堆栈变化 (12)、 mov cl,num ;12设置断点观察cl寄存器的值图1.24 cl寄存器值00h (13)、 add avg,al ;13设置断点观察
12、avg存储单元的值 图1.25 输入第一个分数avg值为00h图1.26 输入第二个分数avg值为01h (14)、pop ax ;14设置断点观察avg存储单元的值 图1.27 avg值为03h (15)、ret ;15设置断点观察堆栈值的变化图1.28 堆栈变化 (16)、 push ax ;16设置断点观察堆栈值的变化 图1.29 堆栈变化 (17)、 add ah,30h ;17设置断点观察ax寄存器的值图1.30 ax寄存器值0300h (18)、mov ascavg ,al ;18设置断点观察ascavg存储单元的值图1.31 ascavg内存单元值ascavg存储单元的值为00h
13、、00h (19)、lea dx,ascavg ;19设置断点观察dx寄存器的值图1.32 dx寄存器 dx寄存器值为0025h9、程序流程图(1)主程序流程图 调用Dos 09系统将Msg1字符串输出到屏幕上开始调用子程序Numproc完成对学生数目的输入再调用09系统输出Msg2字符串调用子程序avgproc算出学生的平均成绩最后调用子程序bta将学生平均成绩ascII码化并输出结束 图1.33 主程序流程图(2)子程序流程图子程序Numproc的流程图:开始将ax,cx,dx压栈以保护数据,并进行回车换行调用Dos 01系统 输入一个十进制数(ASCII形式)Al=0dh ?Al=0Y将
14、十进制数-0转换成真值,经过相关处理并与后面输入的数构成正确的十进制数的形式,结果保留在bx中Dx,cx,ax出栈,返回主程序结束YNN图1.34 Numproc 流程图子程序bta的流程图:开始将ax,bx 入栈,把avg值赋给ax,让bl=10,然后执行div blAl,ah分别得到平均成绩的高位和低位,再分别将其+0转化成ASCLL形式分别赋给ascavg的低位和高位,最后输出结束图1.35 bta流程图子程序avgproc的流程图:开始将ax,cx入栈,dx清零,并把学生总数num赋给cl调用Numproc输入学生成绩,输入一个成绩后,将之赋给ax,便将其在下一次循环时加给ax,cl-
15、1=0Cx,ax出栈,返回主程序Ax加上dx, 除以num,将商加给avg,并把余数赋给dl,dh清零,dec cl结束NY图1.36 Avgproc流程图五、结论 刚开始接触汇编语言,从安装masm611,建立工程文件、编译、运行到调试,我遇到了很多问题,但都经过多次练习加以熟悉了,不过调试阶段还是有着一些小问题。通过这次实验,我对汇编语言的开发环境和其的开发过程有了一定的认识,也对 DOS 下的操作界面更加熟悉。但是,我觉得对该开发环境的使用开发还有待提高,要再花些时间用在如何调试功能上,希望在今后的实验中能够更加准确的掌握该软件的用法,能够很好的运用它的功能,总之这次实验还是很有收获的。
16、实验二 Masm6.11的使用方法一、实验目的1、了解汇编语言程序的基本结构。2、学习如何编写简单的汇编语言程序。3、学习汇编语言程序的各个段:数据段、堆栈段、代码段的作用。二、实验环境该试验包括的硬件和软件条件如下:1、硬件环境 (1)Intel Core Duo CPU P8700 (2)内存4G2、软件环境 (1)Window 7 (2)DOSBOX软件(3)MASM6.11开发软件三、实验步骤从键盘上输入两个字符串,比较两个字符串的大小,如果第一个字符串比第二个字符串大,则显示1;如果两个字符串相等,则显示0;如果第一个字符串比第二个字符串小,则显示-1。1.画出实现上述功能的汇编语言
17、程序流程图。2.写出实现上述功能的汇编语言程序。3.编译、连接编写的汇编语言程序,并运行生成的可执行文件,描述其执行情况。4.对上述程序进行调试,比较反汇编后的程序和源程序的区别。5.描述反编译后的程序在执行之前数据段内容以及调试过程中各寄存器的变化情况和执行结束后数据段的内容。 四、实验结果及分析1、程序流程图Repz cmpsb调用0a系统输入字符串str1(将其长度赋给bl)调用0a系统输入字符串str2比较str1和str2长度,将小的赋给cl,ch清0Cmp bl,str2JZ屏幕输出1屏幕输出 -1JBJAJa屏幕输出0JZ结束屏幕输出 -1JB开始 图2.1 程序流程图二.实验代
18、码data segmentMsg1 db input the first string:$Msg2 db input the second string:$Msg3 db the result is:$Msg db 0ah,0dh,24hstr1 db 100,0,100 dup(0)str2 db 100,0,100 dup(0)data endsstack segment para stackdb 20h dup(0)stack endscode segmentassume cs:code,ss:stack,ds:datastart:mov ax,datamov ds,axmov es,a
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Masm6 11 使用方法 汇编语言 程序设计 最终版