实验二 熟悉汇编语言程序的设计及调试方法 10024211 赵茜 同组者.docx_第1页
实验二 熟悉汇编语言程序的设计及调试方法 10024211 赵茜 同组者.docx_第2页
实验二 熟悉汇编语言程序的设计及调试方法 10024211 赵茜 同组者.docx_第3页
实验二 熟悉汇编语言程序的设计及调试方法 10024211 赵茜 同组者.docx_第4页
实验二 熟悉汇编语言程序的设计及调试方法 10024211 赵茜 同组者.docx_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

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

文档简介

实验二 熟悉汇编语言程序的设计及调试方法10024211 赵茜 同组者:10024226 戴琳 (一) 实验目的1 熟悉汇编语言源程序的框架结构,学会编制汇编程序。2 熟悉汇编语言上机操作的过程,学会汇编程序调试方法。(二) 实验内容1. 学习编写汇编语言源程序的方法,了解数据存放格式。2. 阅读给出的程序,找出程序中的错误。3. 通过调试给出的汇编语言源程序,了解并掌握汇编语言程序的建立、汇编、连接、调试、修改和运行等全过程。 (三) 实验预习 1.阅读实验指导第1章的内容,了解汇编语言程序建立、连接、调试的全过程。 2.下面的汇编语言源程序有错误的,是给出程序加注释。通过调试手段找出程序中的错误并修改之。写出程序的功能,画出程序流程图。STACKSGSEGMENT PATA STACK STACKDB256 DUP (?)STACKSGENDSDATASG SEGMENT PARA DATABLOCK DW0,-5, 8, 256,-128, 96, 100, 3,45,6,512DW23, 56, 420, 75,0,-1024,-67,39,-2000COUNT EQU 20MAXDW?DATASG ENDSCODESG SEGMENT ASSUME SS: STACKSG, CS: CODESGASSUME DS: DATASGORG100HBEGIN:MOV DS, DATASG LEASI, BLOCKMOV CX, COUNTDEC CXMOV AX, SICHKMAX: ADD SI, 2CMP SI, AXJLENEXTMOVAX, SI DEC CXNEXT:LOOP CHKMAXMOV MAX, AXMOV AH, 4CHINT21HCODESG ENDSENDBEGIN(四) 实验步骤1 建立汇编与呼延源程序,对所建立的汇编语言源程序经行编译、连接。2 运行DEBUG调试程序,装入被调试程序,用U命令查看调入的程序,记录代码段基值和数据段基值,用R命令查看并记录下当前寄存器内容。3 用D命令查看并记录下内存中数据存放格式。4 用T命令单步运行程序,观察各条指令执行结果,以及对寄存器、标志位、内存单元的影响,若查找出程序中的错误,用Q命令退出DEBUG环境,修改汇编语言源程序,重复上述步骤,直至整个程序无误。5 若将LEA SI, BLOCK语句改为LEA SI, BLOCK+2*COUNT-2,并将ADD SI, 2改为SUB SI, 2,重新运行程序,观察运行结果。6 若重新给出一组市局,可用E命令输入新数据后运行程序,观察并记录运行结果。7 若要求找出数据区中最小数,程序将如何修改,试上机调试。(五) 实验预习1.程序错误的检查第一行PARA错,应写为PATA。BEGIN: MOV DS,DATASG ; 段寄存器不能直接赋值。DEC CXNEXT: LOOP CHKMAX LOOP指令执行时,寄存器CX自动减1,应把DEC CX语句删掉。修改后程序:STACKSG SEGMENT PARA STACKSTACK ;定义堆栈段 DB 256 DUP (?) ;堆栈段为256个字节空间,STACKSG ENDSDATASG SEGMENT PARA DATA ;设置数据段BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512;定义数据段有20个字的数据 DW 23, 56, 420, 75, 0,-1024,-67,39,-2000COUNT EQU 20 ;定义计数次数常量COUNT等于20MAX DW ? ;保留1个字空间,用以存放最大值结果DATASG ENDSCODESG SEGMENT ;代码段ASSUME SS : STACKSG, CS : CODESG ;STACKSG为堆栈段CODESG为代码段ASSUME DS : DATASG ;DATASG为数据段 ORG 100H ;指令语句的起始偏移量为100HBEGIN: MOV AX, DATASG MOV DS,AX ;给段寄存器赋值 LEA SI,BLOCK ;将SI设为指向数据的指针 MOV CX,COUNT ;设置循环次数,CX中装入计数初值 DEC CX ;CX循环次数减1MOV AX,SI ;从内存取数到AX CHKMAX: ADD SI,2 ;取完一次数据,地址偏移量加2 CMP SI,AX ;数据指针当前所指单元的值与 AX比较 JLE NEXT ;取其中较大者存于AX中 MOV AX,SI NEXT: LOOP CHKMAX ;与数据段最后一个数据比较后跳出循环 MOV MAX,AX ;保存最大值到MAX MOV AH,4CH ;退出程序 INT 21H CODESG ENDSEND BEGIN2.程序功能:找出20个数中的最大值,并保存。3.程序流程图:开始初始化从内存取数SI=SI+2 NSIAX YAX=SI NCX自减1CX=0 Y保存最大值结果结束(六)实验步骤步骤1:链接 编译步骤2:如图所示,代码段基值为1940,第一条语句MOV AX,193D对应源程序中MOV AX,DATA 语句,所以数字段基值为193D。步骤3 步骤4:可以看出开始DS=191D的取值是随机的,因为程序并没有开始执行完整。步骤5 步骤6:可见,用E命令输入新的数据后运行结果的变化对比。(七)思考题1.在装入被调试程序后,如何知道分配给该用户程序的数据段在内存中的位置? 在DEBUG环境中观察CPU。2.数据区中以什么形式存放有符号数的?数据区中以补码形式存放有符号数。3.修改前、后的程序在执行时有何区别?程序在修改前为按正序查找最大值,修改后为倒序查找最大值。4.程序执行完毕,结果存放在何处?内存 MAX 18A2:00285.总结一下CS,IP,SS,DS,ES被设置的区别。CS:代码段寄存器IP:代码指针,通过ORG 100H命令转移SS:堆栈段寄存器DS:数据段

温馨提示

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

评论

0/150

提交评论