福建农林大学金山学院(程序设计类课程)实验报告课程名称:汇编语言姓名:陈振韦系:信息与机电工程专业:电子信息工程年级:2012级学号:126710100指导教师:刘永芬职称:讲师2013~2014学年第二学期实验项目列表序号实验项目名称成绩指导教师1实验一汇编程序的汇编及运行刘永芬2实验二顺序程序设计刘永芬3实验三分支循环程序设计刘永芬4实验四子程序设计刘永芬5实验五DOS功能调用刘永芬总平均福建农林大学金山学院实验报告系:信息与机电工程系专业:电子信息工程年级:12姓名:陈振韦学号:126710100实验课程:汇编语言实验室号:___试验A楼_608_实验设备号:实验时间:2014,4,9指导教师签字:刘永芬成绩:实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM.EXE);连接装配程序:LINK.EXE;交叉引用程序:CREF.EXE(可有可无)。3.实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DATASEGMENTORG20HNUM1=8NUM2=NUM1+10HDA1DB‘IBMPC’DA2DB0AH,0DHCOUNTEQU$-DA1DATAENDSEND(2)输入有错误的文件,修改错误语句。(MASM没有出现错误即可。不必连接、运行。)DATASEGMENTVAR1DB0,25,ODH,300VAR2DB12H,A4H,6BHVAR3DB’ABCDEF’VAR4DW1234H,5678HVAR5DW10HDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DE:DATABEINGMOVAX,DATAMOVDS,AXLEASI,VAR5MOVBX,OFFSETVAR2MOV[SI],0ABHMOVAX,VAR1+2MOV[BX],[SI]MOVVAR5+4,VAR4MOVAH,4CHINT21HCODEENDSENDSTART(3)输入正确的程序,汇编、连接、运行STACKSSEGMENTSTACKDW128DUP(?)STACKSENDSDATASSEGMENTSTRINGDB‘WELCOME!’,13,10,‘$’DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXLEADX,STRINGMOVAH,9INT21HMOVAH,4CHINT21HCODESENDSENDSTART4.算法描述及实验步骤(1)在记事本编写源程序1.txt,masm1.txe回车,回车,出现提示输入1,生成1.lst,打开1.lst,查看内容。(2)在记事本编写源程序2.txt,masm1.txe回车,回车,出现提示输入2,查看错误,再在2.txt修改内容,然后经汇编生成.obj文件,链接生成.exe文件。(3)在记事本编写源程序3.txt,masm3.txe回车,回车,然后经汇编生成3.obj文件,链接生成3.exe文件,debug3.exe,输入g显示出结果。5.调试过程(1)调试过程如下图:(2)实验2出现10个错误,1个警告。如下图:修改过程:(1)ODH改为0DH;(2)300改为30;(3)‘ABCDEF‘将引号改为英文型引号;(4)在BEGINE后加冒号;(5)将MOV[SI],0ABH改为MOVBYTEPTR[SI],0ABH;(6)将MOV[BX],[SI]改为MOVCX,[BX]MOVCX,[SI]MOV[BX],CX;(7)将MOVVAR5+4,VAR4改为MOVDX,VAR5+4MOVDX,VAR4MOVVAR5+4,DX(3)修改如下:‘WELCOME!’和‘$’的引号改为英文型的,START后的冒号改为英文型的。6.实验结果(1)DA1,DA2的偏移量分别是多少?COUNT的值为多少?(2)修改后的结果如下图:(3)实验结果如下图:7.总结本次会编,真是一次艰难的事情啊,不过我想万事开头难。通过这次汇编我学会了一些基本的汇编、连接、执行过程;试验段目的不是为了验证书本理论,更重要的是对实践能力的培养。福建农林大学金山学院实验报告系:信息与机电工程系专业:电子信息工程年级:2012姓名:陈振韦学号:1256710100实验课程:汇编语言实验室号:__实验楼a606实验设备号:j6实验时间:4.16指导教师签字:成绩:实验二顺序程序设计1.实验目的和要求1.学习使用DEBUG的命令;2.使用DEBUG命令在数据段中查看程序运行的结果;3.利用DEBUG运行简单的程序段。2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM.EXE);连接装配程序:LINK.EXE;交叉引用程序:CREF.EXE(可有可无)。3.实验内容及实验数据记录1)输入程序观察寄存器变化使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。注意用T命令执行时,CS:IP寄存器的内容MOVAX,4E20ADDAX,1416MOVBX,2000ADDAX,BXMOVBX,AXADDAX,BXMOVAX,001AMOVBX,0026ADDAL,BLADDAH,BLADDBH,ALMOVAH,0ADDAL,BLADDAL,9C2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。如果原来是大写,要如何修改指令,使得它们变成小写?DSEGSEGMENTMSG1DB‘abc’DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXLEABX,MSG1MOVCX,3S:MOVAL,[BX]ANDAL,11011111B;将AL中的ASCII码的第5位置0,;变成大写字母。MOV[BX],ALINCBXLOOPSMOVAL,0MOVAH,4CHINT21HCSEGENDSENDSTART3)程序的跟踪执行操作在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。那么如何查看程序的运行结果呢?程序执行过程的跟踪操作步骤如下:(1)在DOS下输入:DEBUG文件名.EXE(2)在DEBUG提示符下输入U命令(3)可以用T命令单步执行指令,执行到MOVAH,4CH时结束,也可以用G命令执行整个程序,输入:G=B地址(如:G=0000)(4)用D命令查看程序执行后数据段的变化输入:DK地址:0(如:D1260:0)在显示的数据中,对照源程序或LST文件查看结果所在的偏移地址的内容。4)编写调试下面的程序,用DEBUG查看数据段中的结果(1))/()510*)((YXXWZ,X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。(2)X,Y为字节类型数,求16/)2*)(8*)((YXYXZ,写出完整的数据段和代码段,不用乘除指令。4.算法描述及实验步骤1、修改成正确的代码;obj》link》exe;2、修改成正确的代码;obj》link》exe;4、一丶①初始化②有符号数乘法imul(单操作数),被乘数在ax中,将(w-x)送入ax,Imul10,因为8bit*8bit,结果超过8bit,存于dx:ax-bx:cx。③有符号数相加add,并且两操作数位数要一致。④用add加法指令,算出x+y。⑤有符号数除法idiv(单操作数),当除数是8bit,被除数要16bit,所以被除数默认存于dx:ax,除后商在ax,余数在dx.⑥最后结果存在z变量中。二丶①初始化②把X存在AL中,使用add,使X,Y相加,存在AL中。③乘8相当于左移3位,移动位数存于CX中。乘完后存于AX中。④把X存在BL中,使用SUB,使X,Y相减,存在BL中。⑤乘2相当于左移1位。乘完后存于BX中。⑥然后SUB,AX,BX⑦除16相当于右移4位,移动位数存于CX中。乘完后存于AX中。⑧最后结果存在z变量中。汇编好程序,保存txt中,运行masm生成lst文件,有错误就进行修改,修改后再链接文件生成obj文件,debug生成exe文件,然后g命令运行一次,最后d命令查看结果。5.调试过程1、错误的代码正确的分步2、d命令查看当BX=0000时的AL,CX的变化情况:当BX=0001时AL,CX的变化情况:3、当BX=0002时AL,CX的变化情况4、不用做5、程序无误调试出错U命令D命令6.实验结果见调试过程中的末张图7.总结学会使用debug,各种命令。1、学习使用debug的命令;2、使用debug命令在数据段中查看程序运行的结果;3、利用debug运行简单的程序段。福建农林大学金山学院实验报告系:信息与机电工程专业:电子信息工程年级:12级姓名:陈振韦学号:126710100实验课程:汇编语言实验室号:____608实验设备号:j3实验时间:4/23指导教师签字:成绩:实验三分支循环程序设计1.实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM.EXE);连接装配程序:LINK.EXE;交叉引用程序:CREF.EXE(可有可无)。3.实验内容及实验数据记录1.有10个数,统计正数的个数,存放在变量M中。经过汇编后,形成EXE文件。在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确。(AL寄存器中存放正数的个数)DSEGSEGMENTMSGDB4,-2,-6,0,5,67,8,-3,5,6MDB?DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVCX,10MOVAL,0LEASI,MSGL1:MOVBL,[SI]CMPBL,0JBENEXTINCALNEXT:INCSILOOPL1MOVM,ALMOVAL,0MOVAH,4CHINT21HCSEGENDSENDSTART2.数据段中是一组无符号数,将最小数存放在M单元中。按上题方法查找一处逻辑错误。DSEGSEGMENTMSGDB13,15,7,25,24MDB?DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVCX,4MOVAL,MSGMOVSI,OFFSETMSG+1L1:CMPAL,[SI]JBNEXTMOVAL,[SI]NEXT:LOOPL1MOVM,ALMOVAL,0MOVAH,4CHINT21HCSEGENDSENDSTART3.编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。4.编程:81iiiBAY,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。4.算法