ImageVerifierCode 换一换
格式:DOCX , 页数:73 ,大小:1.20MB ,
资源ID:6432661      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6432661.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编实验报告汇编程序的汇编及运行顺序程序设计分支循环程序设计子程序设计dos功能调用.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编实验报告汇编程序的汇编及运行顺序程序设计分支循环程序设计子程序设计dos功能调用.docx

1、汇编实验报告汇编程序的汇编及运行顺序程序设计分支循环程序设计子程序设计dos功能调用福建农林大学东方学院信息工程类实验报告课程名称:汇编语言姓 名:廖少兵系:计算机系专 业:电子信息工程年 级:2010学 号:1050302103指导教师:职 称:2012年 6 月 17 日 福建农林大学东方学院信息工程类实验报告系: 计算机系 专业: 电子信息工程 年级: 10 姓名: 廖少兵 学号: * 实验课程: 汇编语言 实验室号:_ 实验设备号: 实验时间: 指导教师签字: 成绩: 实验一 汇编程序的汇编及运行1实验目的和要求 1、熟悉汇编程序的汇编、连接、执行过程2、生成LST文件,查看LST文件

2、3、生成OBJ文件,修改语法错误4、生成EXE文件5、执行2实验的原理和主要仪器设备IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.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的值为多少?DATA SEGMENT

3、ORG 20H NUM1=8 NUM2=NUM1+10H DA1 DB IBM PC DA2 DB 0AH, 0DH COUNT EQU $-DA1 DATA ENDS END2、输入有错误的文件,修改错误语句。(MASM没有出现错误即可。不必连接、运行。) DATA SEGMENT VAR1 DB 0, 25, ODH, 300 VAR2 DB 12H, A4H, 6BH VAR3 DB ABCDEF VAR4 DW 1234H, 5678H VAR5 DW 10H DUP(?) DATA ENDS CODE SEGMENT ASSUME CS: CODE, DE: DATA BEING M

4、OV AX, DATA MOV DS, AX LEA SI, VAR5 MOV BX, OFFSET VAR2 MOV SI, 0ABH MOV AX, VAR1+2 MOV BX, SI MOV VAR5+4, VAR4 MOV AH, 4CH INT 21H CODE ENDS END START3、输入正确的程序,汇编、连接、运行STACKS SEGMENT STACK DW 128 DUP(?) STACKS ENDS DATAS SEGMENT STRING DB WELCOME!, 13, 10, $ DATAS ENDS CODES SEGMENT ASSUME CS: CODE

5、S, DS: DATAS START: MOV AX, DATAS MOV DS, AX LEA DX, STRING MOV AH, 9 INT 21H MOV AH, 4CH INT 21H CODES ENDS END START4操作方法及实验步骤 编写各代码并存储为源程序asm文件,对其进行汇编、连接。1、Dos进入masm目录2、masm 文件名(对文件进行编译)3、link 文件名(对生成OBJ目标文件进行连接) 4、由dos加载连接后生成的可执行文件来执行程序5实验数据处理和分析(1)(2)如图输入代码编译未能通过,提示出错有9处其中2、3、9行均为符号未定义错误,其中修改OD

6、H中O在十六进制中未定义(不存在)、而A4H以字母开头必须添上数字0)、寄存器中没有DE故而修改之。第十行我们暂且放着,第十四行提示说操作数必须指定大小空间由代码可知,立即数ABH传给内存单元时,必须指定内存大小空间,所以可修改该句为MOV BYTE PTR 0ABH。而15行的错误提示与17行一样均不能找到段寄存器所分配的地址,15行从代码格式上看除了位数不一致外并不是如是的所提错误,而17行是错在两个立即数作为MOV指令的操作数,我们先跳过。下面16行的错误是非法错误的操作数格式,这里两个操作数均是内存单元里的数据,可修改【BX】为BX。由21行错误可知START未定义,之前程序入口中出现

7、了标识符BEING,因此这里改为BEING。同时可知刚刚第十行错误就显而易见了,标识的格式错了。应该为BEING:。部分修改后代码如下:重新编译得如下错误提示第2行中300超出了所分配的看空间字节大小,这里把它改为30,比较之前的出错提示17行和15行的均改变了,这才具体指出了出错原因。这里15行我们就修改AX为AL,匹配两操作数位数。17行中我们为不改变原意可以用如下指令替代:MOV CX,VAR4; MOV VAR5+4,CX;(3)编辑源程序后编译未能通过,提示如图:我们打开源程序看到如图所示:我们之前定义的是DATAS而不是DATAX,修改之。编译通过,我们link进行连接如图:已生成

8、可执行文件3.exe。6. 实验结果(1)编辑源程序后编译生成list文件提示时输入文件名得到1.list文件。打开如图得知:DA1、DA2的偏移量分别是0020H和0026H。(2)通过以上调试分析,最终修正代码,如图已能通过编译。(3)运行3.exe文件,结果如图:7. 总结,质疑,建议,问题讨论 通过此次上机实验进行从编辑源程序到最终的可执行文件的生成并运行。加深了我对程序编译连接运行程序的整个过程的理解,而其中的编译过程让我看到了一个不显眼list文件对之后查错,核实各个指令运行的正确性应该说是程序员的理解与系统处理是否存在出入的重要性,其次让我更加懂得去读懂出错提示,根据提示定位代码

9、的错误之处并修正,再者从实验中发现了重要的一点,要让编译器给出正确或说是更确切的指示,我们应该先保证自己编写的代码语法上的严谨与规范,如17行与15行的错误提示由于程序入口标识符的错误定义而受影响的情况。实验二 顺序程序设计1实验目的和要求(1)学习使用DEBUG的命令;(2)使用DEBUG命令在数据段中查看程序运行的结果;(3)利用DEBUG运行简单的程序段。2实验用的软硬件环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE

10、);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。3实验内容及实验数据记录1)输入程序观察寄存器变化 使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。注意用T命令执行时,CS: IP寄存器的内容 MOV AX, 4E20 ADD AX, 1416 MOV BX, 2000 ADD AX, BX MOV BX, AX ADD AX, BX MOV AX, 001A MOV BX, 0026 ADD AL, BL ADD AH, BL ADD BH, AL MOV AH, 0 ADD AL, BL ADD AL,

11、9C 2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。 DSEG SEGMENT MSG1 DB abc DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX LEA BX, MSG1 MOV CX, 3 S: MOV AL, BX AND AL, 11011111B ;将AL中的ASCII码的第5位置0, ;变成大写字母。 MOV BX, AL INC BX LOOP S MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS EN

12、D START 3)程序的跟踪执行操作 在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。那么如何查看程序的运行结果呢?程序执行过程的跟踪操作步骤如下: (1)在DOS下输入:DEBUG 文件名.EXE (2)在DEBUG提示符下输入U命令 (3)可以用T命令单步执行指令,执行到 MOV AH, 4CH时结束,也可以用G命令执行整个程序,输入:G=B地址(如:G=0000) (4)用D命令查看程序执行后数据段的变化 输入:D K地址:0 (如:D1260:0) 在显示的数据中,对照源程序或LST文件查看结果所在的偏移地址的内容。

13、4)输入下面程序,按实验一和上面步骤运行一遍DSEG SEGMENTMSG1 DW 7856H,2038HMSG2 DW ?DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX MOV AX,MSG1 AND AX,MSG1+2 MOV MSG2,AX MOV AL,0 MOV AH,4CH INT 21HCSEG ENDS END START 5)编写调试下面的程序,用DEBUG查看数据段中的结果(1),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。(无符号数)(2)X,Y为字节类型数,

14、求,写出完整的数据段和代码段,不用乘除指令。(无符号数)4操作方法及实验步骤 1)(1)、dos进入debug环境,输入a进行程序段写入内存操作,如图:(2)、输入t单步运行跟踪观察到各寄存器的变化如图:(3)、在执行第一条指令MOV AX, 4E20后寄存器AX内容随即变为4E20,而当执行第二条指令ADD AX, 1416后AX变为了6236,运行随后的指令各寄存器的变化完全吻合程序段所实现的功能,并且不难看到IP由0103不断的增加,而CS保留为13A1不变。2)(1)、由文本编辑内容2中的程序段存为II2.txt文件,并masm编译link连接通过,如图:3)& 4)(1)、文本编辑内

15、容4中代码段保存为II4.txt,masm编译link连接通过:(2)、d命令查看MSG2单元中存放的值,如图(执行AND AX,MSG1+2后,未执行MOV MSG2,AX指令):5)(5-1)编写程序段如下:(1)、分析题目可知数据段中有X、Y、W、Z和常数10、5,所以有: DATA DB 5,10 X DB 2 Y DB 8 Z DW ? W DB 10(2)、代码段中先执行(W-X)*10有: MOV AL,W SUB AL,XCBW;之前误解为乘指令操作数需16位故而出现此错误。 MUL DATA+1之后加5结果除于X+Y有: ADD AX,DB ;DATA错输入为DB MOV C

16、L,X ADD CL,Y DIV CL(3)、所以有最初代码如下(错误) DSEG SEGMENT DATA DB 5,10 X DB 2 Y DB 8 Z DW ? W DB 10 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV AL,W SUB AL,X CBW MUL DATA+1 ADD AX,DB MOV CL,X ADD CL,Y DIV CL CSEG ENDS END START(5-2)编写程序段如下(1)、分析题目可知数据段中有X、Y、Z和常数8、2、16,所以有:

17、DATA DB 8,2,16X DB 5Y DB 3Z DW ?(2)、代码段先实现(X+X)*8有如下: MOV AL,XADD AL,AL ;实现X+XMOV CL,3SHL AL,CL ;逻辑左移3位实现乘8 实现(X-Y)*2有:MOV BL,XSUB BL,Y ;实现X-YMOV CL,1SHL BL,CL ;逻辑左移1位实现乘2实现分子部分(X+X)*8-(X-Y)*2:SUB AL,BL实现除于16并把结果送Z:MOV CL,4SHR AL,CL ;逻辑右移4位实现除于16MOV Z,AL(3)、程序段通过编译并并成功链接,如图:5实验数据处理与分析(1)、直接运行II2.exe

18、文件可以看到dos窗口未显示任何信息,于是debug II2.exe文件跟踪执行,如图:(2)、t命令单步运行观察到IP在不断得递增指向下一条指令:执行第一和第二次时CX递减,可以看到CX=0002,CX=0001,a变为了大写A,b变为了大写B:同理之后可以看到CX=0000时执行循环结束完成字符串大小写转换。5-1)(1)、编译未能通过如图:(2)、修改未定义标识符DB为DATA,编译仍然出错:(3)、操作数位数不一致,分析可知在执行(W-X)*10后结果存放在AX中为能满足除法指令要求被除数为字节时,默认隐含除数为(AX),于是修改代码段如下:START: MOV AX,DSEGMOV

19、DS,AXMOV AL,WSUB AL,XMUL DATA+1MOV BX,AX ;注1MOV AL,DATA ;注2CBW ;注3ADD AX,BX ;实际上注释的指令完全可以用ADD AL,DATA代替,之前是在多此一举,自己在给自己添麻烦。 MOV CL,XADD CL,YDIV CLCSEG ENDSEND START(4)、最终编译连接成功如下:(1)、 debug II5b.exe 跟踪程序,u反汇编可以看到数据段段地址为076A;再从lise文件中查看得Z得偏移量为0002,如图:(2)、因此执行完程序段后可以看到AX=0704为即是AL=04,结果正确;6. 实验结果1)对比之

20、前我们程序段录入时前段显示的正是13A1且“:”之后的数字和IP的变化一致,可知cpu在执行指令时是通过CS代码寄存器定位代码段所处内存单元和改变IP指令寄存器中的地址(偏移量)来具体指定所要执行的指令。2)& 3)程序段实现了转输入字符串转小写为大写的功能:通过d命令跟踪到数据段的变化对比程序段可知通过该指令 AND AL, 11011111B可知在原字符的ASCII码中的第五位逻辑与上0其他为不变,其值相当于减小了25=32实现了小写到大写的转换,同理若要将大写转换为小写只需将该句改写成OR AL,00100000(加上25=32)即可。4)查看list文件不难得知MSG2偏移地址为000

21、4,如图:执行MOV MSG2,AX指令后d查看1415:0004即是MSG2单元内容为2010:5-1)DEBUG查看到AX结果为0508即商为8余数为5如图:由list可查看到z的偏移量为0004:D076A:0004命令查看到如图Z中为空,遗忘了将AX数据传送给了Z;代码段中补充指令MOV Z,AX执行d076A:0004最终得到Z中结果0805即是商8余5,如图:5-2)由之前操作后可执行d076A:0002即可查看Z单元数据为04即是所求商如图:7. 质疑,建议,问题讨论,总结实验中我掌握了编写简单的程序,并且高效得运用debug进行调试,有效地跟踪指令观察各指令所实现得功能,并熟练

22、运用其查看数据段的内容。在编写并调试程序得环节中,由于对指令得不熟悉导致了一些不必要得麻烦,如第五题1中得设计,由于对部分隐含寄存器操作的不确定使得在符号扩展方面上出现问题最后竟绕了个圈。程序最终虽能通过编译并连接运行得到正确得结果,但总认为缺少些什么 ,如在对DS装入时AX的改变有可能对后面得指令造成影响,因而就必须对其装入后其他指令使用其前进行清零操作XOR AX,AX。而至于DOS的功能调用方面由于在这里对程序影响不大,同时略去MOV AH,4CH ; INT 21H;的一个好处就是让我更好了解到t跟踪运行多条指令的好处并能很好得运用它,使我更深刻理解了调试程序对整个程序设计得重要。总而

23、言之该次实验让我看到了自己很多不足并学到了很多,很好得巩固升华了理论知识。 实验三 分支循环程序设计1实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。 2实验用的软硬件环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。3实验内容及实验数据记录6、有10个数,统计正数的个数,存放在变量M中中

24、。经过汇编后,形成EXE文件。在DEBUG中,先用G0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。用单步执行命令T0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确。(AL寄存器中存放正数的个数)DSEG SEGMENT MSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 10 MOV AL, 0 LEA SI, MSG L1: M

25、OV BL, SI CMP BL, 0 JBE NEXT INC AL NEXT: INC SI LOOP L1 MOV M, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START数据段中是一组无符号数,将最小数存放在M单元中。按上题方法查找一处逻辑错误。 DSEG SEGMENT MSG DB 13, 15, 7, 25, 24 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 4 MOV AL, MS

26、G MOV SI, OFFSET MSG+1 L1: CMP AL, SI JB NEXT MOV AL, SI NEXT: LOOP L1 MOV M, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START7、编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。8、编程:,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。4操作方法及实验步骤1)编辑代码,编译连接均可通过,亦能正常运行。 DSEG SEGMENT MSG DB 4, -2, -

27、6, 0, 5, 67, 8, -3, 5, 6 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 10 MOV AL, 0 LEA SI, MSG L1: MOV BL, SI CMP BL, 0 JBE NEXT INC AL NEXT: INC SI LOOP L1 MOV M, AL MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START查看list文件得知M单元偏移量为000A,如图:g命令运行后,d命

28、令查看(d1415:000A)得知M中值为09即是正数有9个,显然是不正确的如图 2)同一编辑如下代码进行编译连接运行均正常; DSEG SEGMENT MSG DB 13, 15, 7, 25, 24 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 4 MOV AL, MSG MOV SI, OFFSET MSG+1 L1: CMP AL, SI JB NEXT MOV AL, SI NEXT: LOOP L1 MOV M, AL MOV AL, 0 MOV AH, 4CH IN

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1