您好,欢迎访问三七文档
汇编语言实验指导书电子科技大学计算机学院二○○六年八月1目录实验一汇编源程序的上机调试操作基础训练……………………………..2实验二数制、码制和子程序的编程与调试……………………………….6实验三分支程序与循环程序设计……………………………………….10实验四串操作指令及其应用程序的设计与调试运行……………………12附录实验报告……………………………………………………………152实验一汇编源程序的上机调试操作基础训练一.实验目的:1.掌握DEBUG的基本命令及其功能2.学习数据传送和算术运算指令的用法3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。二.实验内容:(一)DEBUG命令的使用DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。1、DEBUG程序的启动在DOS提示符下,可键入命令:CDEBUG[d:][path][文件名][参数1][参数2]其中文件名是被调试文件的名称,它须是执行文件(EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。2、DEBUG的主要命令(1)汇编命令A,格式为:-A[地址]该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。(2)反汇编命令U,有两种格式:1)-U[地址]该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。2)-U范围3该命令对指定范围的内存单元进行反汇编,例如:-U04BA:01000108或–U04BA:0100L9此二命令是等效的。(3)运行命令G,格式为:-G[=地址1][地址2[地址3。。。]]其中地址1规定了运行起始地址,后面的若干地址均为断点地址。(4)追踪命令T,有两种格式:1)逐条指令追踪:-T[=地址]该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。2)多条指令追踪:-T[=地址][值]该命令从指定地址起执行n条命令后停下来,n由[值]确定。(5)显示内存单元内容的命令D,格式为:-D[地址]或-D[范围](6)修改内存单元内容的命令E,它有两种格式:1)用给定的内容代替指定范围的单元内容:-E地址内容表例如:-E2000:0100F3“XYZ”8D其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。2)逐个单元相继地修改:-E地址例如:-E100:18E4:010089.78此命令是将原100号单元的内容89改为78。78是程序员键入的。(7)检查和修改寄存器内容的命令R,它有三种方式:1)显示CPU内部所有寄存器内容和标志位状态;格式为:-RR命令显示中标志位状态的含义如下表所示:标志名置位复位溢出Overflow(是/否)OVNV方向Direction(减量/增量)DNUP4中断Interrupt(允许/屏蔽)EIDI符号Sign(负/正)NGPL零Zero(是/否)ZRNZ辅助进位AuxiliaryCarry(是/否)ACNA奇偶Parity(偶/奇)PEPO进位Carry(是/否)CYNC2)显示和修改某个指定寄存器内容,格式为:-R寄存器名例如打入:-RAX系统将响应如下:AXFIF4:表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:-RBXBX0369:059F则BX内容由0369改为059F3)显示和修改标志位状态,命令格式为:-RF系统将给出响应,如OVDNEINGZRACPECY-这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如OVDNEINGZRACPECY-PONZDINV(8)命名命令N,格式为:-N文件名此命令将文件名格式化在CS:5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。(9)装入命令L,它有两种功能:1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:-L地址驱动器扇区号扇区数2)装入指定文件,格式为:-L[地址]5此命令装入已在CS:5CH中格式化的文件控制块所指定的文件。在用L命令前,BX和CX中应包含所读文件的字节数。(10)写命令W,有两种格式:1)把数据写入磁盘的指定扇区:-W地址驱动器扇区号扇区数2)把数据写入指定文件中:-W[地址]此命令把指定内存区域中的数据写入由CS:5CH处的FCB所规定的文件中。在用W命令前,BX和CX中应包含要写入文件的字节数。(11)退出DEBUG命令Q,该命令格式为Q它退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。(二)程序的调试与运行编写程序计算以下表达式:Z=(5X+2Y-7)/2设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。三.实验要求:实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。四.调试步骤1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。3.连接目标程序,产生可执行程序。4.用DEBUG程序调试可执行程序,记录数据段的内容。VARXVARYVARZ5410520206实验二数制、码制和子程序的编程与调试一.实验目的:1、熟练掌握编写汇编语言原程序的基本方法和基本框架。2、熟练使用DEBUG调试程序。3、掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换。4、掌握用DOS功能调用,实现字符的输入和显示。5、掌握子程序的编程与调试方法。二.实验内容:编程实现:从键盘输入4位十六进制数(它对应的二进制数是补码表示的带符号数),把它们转换为带符号非组合型BCD码,并在屏幕上显示出来。三.编程提示:1、从键盘输入1~4位十六进制数,存放在以HEXBUF+2为首址的4个字节单元中。其中HEXBUF+1单元中为输入的数据个数。2、将ASCII码表示的4位十六进制数转换为16位二进制数,并暂时存放在BX中;3、确定十进制数的符号,并把符号(+或-)存放在BCDBUF单元中;4、对BX中的二进制数采用前述算法转换为十进制数(非组合型BCD码),转换结果存放在以BCDBUF+1为首址的5个字节单元中;5、把转换结果的5个非组合型BCD码形成相应的ASCII码6、显示结果。参考程序:TITLECONVERTHEXADECIMALTOBCDDATASEGMENTPROMPTDBINPUTHEXADECIMAL(4DIGITS):$'HEXBUFDB5,0,5DUP(0)DISPDB0AH,0DHBCDBUFDB6DUP(0),'$'DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK17HEXBCD:MOVAX,DATAMOVDS,AX;输入1~4位十六进制数LEADX,PROMPT;显示提示信息MOVAH,09HINT21HLEADX,HEXBUF;输入数据MOVAH,0AHINT21H;ASCII码转换为16位二进制数并存入BX中LEASI,HEXBUF+2;取十六进制数ASCII码首址MOVBX,0;暂存二进制数的寄存器清零MOVCH,HEXBUF+1;取输入数据个数HEX1:MOVAL,[SI];取一个十六进制数字符CMPAL,'9'JBENUMB;小于等于‘9’是数字符SUBAL,07H;是字母符NUMB:ANDAL,0FHMOVCL,4SALBX,CLORBL,ALINCSIDECCHJNEHEX1;确定十进制数的符号MOVBCDBUF,'+'TESTBX,8000HJNSPLUS;是正数MOVBCDBUF,'-';是负数NEGBX;求补后变为原码;将二进制数转换为非组合型BCD码,从二进制;数高位起,进行15次加和乘PLUS:MOVCH,0FH;“加乘”运算的次数LOP0:SHLBX,1;最高位二进制数送CFCALLADDIT;先加1位二进制数CALLMULTI;再乘2DECCHJNELOP0SHLBX,1;加最低位二进制数CALLADDIT;把非组合型BCD码转换为ASCII码形式LEADI,BCDBUF+1MOVCX,5LOP1:ORBYTEPTR[DI],30HINCDI8LOOPLOP1;显示结果LEADX,DISPMOVAH,09HINT21HMOVAH,4CH;程序结束INT21H;多字节BCD码加1位二进制数子程序ADDITPROCLEADI,BCDBUF+5;从低位开始MOVCL,5;取字节数ADD1:MOVAL,[DI];取BCD码ADCAL,0;加二进制数位(CF)AAA;十进制数运算校正MOV[DI],AL;存BCD码DECDIDECCLJNEADD1RETADDITENDP;多字节BCD码乘2子程序MULTIPROCLEADI,BCDBUF+5;从低位开始MOVCL,5CLCMUL1:MOVAL,[DI];取BCD码ADCAL,AL;乘2AAA;十进制数运算校正MOV[DI],AL;存BCD码DECDIDECCLJNEMUL1RETMULTIENDPCOSEGENDSENDHEXBCD四.实验要求:实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等五.实验报告:1、程序说明。说明程序的功能、结构。2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解9决的,并对调试过程中的问题进行分析,对执行结果进行分析。3、写出源程序清单和执行结果。10实验三分支程序与循环程序设计一.实验目的1、掌握分支程序的结构。2、掌握分支程序的设计与调试方法。3、掌握循环程序设计与调试方法4、掌握正确分配与使用寄存器。二.实验内容编程实现:分别统计下列20个数中大于5、小于零和大于零且小于等于5的数据个数,分别存入字节单元RES1、RES2和RES3中。BUFFDB-1,20,3,30,-5,15,100,-54,0,4,78,99,-12,32,3,23,-7,24,60,-51三.实验要求:实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。四.程序框图开始初始化:循环次数=20存储器指针指向数据缓存从数据缓存中取一数据该数大于5?单元RES1计数加1该数小于0?单元RES2计数加1单元RES1计数加1循环次数小于20?结束11五.实验报告:1、程序说明。说明程序的功能、结构。2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。3、画出程序框图。5、写出源程序清单和执行结果。12实验四串操作指令及其应用程序的设计与调试运行一.实验目的1.熟悉串操作指令的基本格式和使用方法。2.掌握常用的串操作程序的设计方法。3.熟悉串操作程序的调试运行过程。二.实验内容编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出来。编程要点:1.在数据段中设置两个存放提示信息的字符串,一个是提示用户输入,另一个是指示显示信息位置;2.在数据段中设置两个存放输入字符串的缓冲区;3.输入字符串采用0AH号DOS功能调用,字符串存入缓冲区时,第2个字节
本文标题:汇编语言实验指导书
链接地址:https://www.777doc.com/doc-3973835 .html