汇编实验二--顺序程序设计.doc_第1页
汇编实验二--顺序程序设计.doc_第2页
汇编实验二--顺序程序设计.doc_第3页
汇编实验二--顺序程序设计.doc_第4页
汇编实验二--顺序程序设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

福建农林大学东方学院信息工程类实验报告系: 计算机系 专业: 电子信息工程 年级: 10 姓名: 廖少冰 学号: 1050302103 实验课程: 汇编语言 实验室号:_ 实验设备号: 实验时间: 指导教师签字: 成绩: 实验二 顺序程序设计1实验目的和要求1. 学习使用DEBUG的命令;2. 使用DEBUG命令在数据段中查看程序运行的结果;3. 利用DEBUG运行简单的程序段。2实验用的软硬件环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.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, BL ADDBH, AL MOVAH, 0 ADDAL, BL ADDAL, 9C2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。DSEGSEGMENTMSG1DBabcDSEGENDSCSEGSEGMENT ASSUMECS: CSEG, DS: DSEGSTART:MOVAX, DSEG MOVDS, AX LEABX, MSG1 MOVCX, 3 S:MOVAL, BX ANDAL, 11011111B ;将AL中的ASCII码的第5位置0,;变成大写字母。 MOV BX, AL INCBX LOOPS MOVAL, 0 MOVAH, 4CH INT 21HCSEGENDS ENDSTART3)程序的跟踪执行操作在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文件查看结果所在的偏移地址的内容。4)输入下面程序,按实验一和上面步骤运行一遍DSEGSEGMENTMSG1DW 7856H,2038HMSG2DW ?DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,MSG1ANDAX,MSG1+2MOVMSG2,AXMOVAL,0MOVAH,4CHINT21HCSEGENDSENDSTART5)编写调试下面的程序,用DEBUG查看数据段中的结果(1),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。(无符号数)(2)X,Y为字节类型数,求,写出完整的数据段和代码段,不用乘除指令。(无符号数)4操作方法及实验步骤 1)(1)、dos进入debug环境,输入a进行程序段写入内存操作,如图:(2)、输入t单步运行跟踪观察到各寄存器的变化如图:(3)、在执行第一条指令MOVAX, 4E20后寄存器AX内容随即变为4E20,而当执行第二条指令ADDAX, 1416后AX变为了6236,运行随后的指令各寄存器的变化完全吻合程序段所实现的功能,并且不难看到IP由0103不断的增加,而CS保留为13A1不变。2)(1)、由文本编辑内容2中的程序段存为II2.txt文件,并masm编译link连接通过,如图:3)& 4)(1)、文本编辑内容4中代码段保存为II4.txt,masm编译link连接通过:(2)、d命令查看MSG2单元中存放的值,如图(执行ANDAX,MSG1+2后,未执行MOVMSG2,AX指令):5)(5-1)编写程序段如下:(1)、分析题目可知数据段中有X、Y、W、Z和常数10、5,所以有:DATADB 5,10XDB 2YDB 8Z DW ?WDB 10(2)、代码段中先执行(W-X)*10有:MOV AL,WSUB AL,XCBW;之前误解为乘指令操作数需16位故而出现此错误。MUL DATA+1之后加5结果除于X+Y有: ADD AX,DB;DATA错输入为DBMOV CL,XADD CL,YDIV CL(3)、所以有最初代码如下(错误):DSEGSEGMENTDATADB5,10XDB2YDB8ZDW ?WDB 10DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVAL,WSUBAL,XCBWMULDATA+1ADDAX,DBMOVCL,XADDCL,YDIVCLCSEGENDSENDSTART(5-2)编写程序段如下(1)、分析题目可知数据段中有X、Y、Z和常数8、2、16,所以有:DATADB 8,2,16XDB 5YDB 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) 2)& 3)(1)、直接运行II2.exe文件可以看到dos窗口未显示任何信息,于是debug II2.exe文件跟踪执行,如图:(2)、t命令单步运行观察到IP在不断得递增指向下一条指令:(3)、d查看数据段的变化未执行到循环体内,CX=0003不变:执行第一和第二次时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 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)、最终编译连接成功如下: 5-2)(1)、 debug II5b.exe 跟踪程序,u反汇编可以看到数据段段地址为076A;再从lise文件中查看得Z得偏移量为0002,如图:(2)、因此执行完程序段后(由于没有写入DOS功能调用,这里不能单独用g命令可用g=“起始地址 断点地址”执行到断点停止或连续用t单步执行或“t 指令数”由当前地址开始执行数条指令,来执行完程序段,否则出现出错弹框)之后d命令查看076A:0002得内容即是Z单元所存放得结果,如图可以看到指令由076B:0000开始到076B:001F结束共14条指令;故而执行te后,有如下图:可以看到AX=0704为即是AL=04,结果正确;6. 实验结果1)对比之前我们程序段录入时前段显示的正是13A1且“:”之后的数字和IP的变化一致,可知cpu在执行指令时是通过CS代码寄存器定位代码段所处内存单元和改变IP指令寄存器中的地址(偏移量)来具体指定所要执行的指令。2)& 3)程序段实现了转输入字符串转小写为大写的功能:通过d命令跟踪到数据段的变化对比程序段可知通过该指令 ANDAL, 11011111B可知在原字符的ASCII码中的第五位逻辑与上0其他为不变,其值相当于减小了25=32实现了小写到大写的转换,同理若要将大写转换为小写只需将该句改写成OR AL,00100000(加上25=32)即可。4)查看list文件不难得知MSG2偏移地址为0004,如图:执行MOVMSG2,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进行调试,有效地跟踪指令观察各指令所实现得功能,并熟练运用其查看数据段的内容。在编写并调试程序得环节中,由于对指令得不熟悉导致了一些不必要得麻烦,如第五题1中得设计,由于对部分隐含寄存器操作的不确定使得在符号扩展方面上出现问题最后竟绕了个圈。程序最终虽能通过编译并连接运行得到正确得结果,但总认为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论