汇编语言实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验一DEBUG命令实验一.实验目的:掌握DEBUG的基本命令及其功能二.实验内容:DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。1、DEBUG的主要命令(1)汇编命令A,格式为:-A[地址];该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。例如:-a136B:0100movax,100136B:0103movbx,200136B:0106movcx,300136B:0109movdx,400136B:010C-(2)反汇编命令U,有两种格式:1)-U[地址]该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。例如:-u2)-U范围该命令对指定范围的内存单元进行反汇编,例如:(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各占一个字节,用这五个字节代替原内存单元049e:0005到0008的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。2)逐个单元相继地修改:-E地址例如:此命令是将原5号单元的内容f3改为8989是程序员键入的。(7)检查和修改寄存器内容的命令R,它有三种方式:1)显示CPU内部所有寄存器内容和标志位状态;格式为:-RR命令显示中标志位状态的含义如下表所示:标志名置位复位溢出Overflow(是/否)OVNV方向Direction(减量/增量)DNUP中断Interrupt(允许/屏蔽)EIDI符号Sign(负/正)NGPL零Zero(是/否)ZRNZ辅助进位AuxiliaryCarry(是/否)ACNA奇偶Parity(偶/奇)PEPO进位Carry(是/否)CYNC2)显示和修改某个指定寄存器内容,格式为:-R寄存器名例如打入:-RAX表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:-RBXBX0369:059F则BX内容由0369改为059F3)显示和修改标志位状态,命令格式为:-RF系统将给出响应,如OVDNEINGZRACPECY-这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如OVDNEINGZRACPECY-PONZDINV三、实验任务1.参照附录1,掌握DEBUG程序的各种命令,重点是命令R,D,A,U,T,P,G命令的使用。2.用命令A汇编下列指令,判断指令正误并说明原因。(1)RORAX,8(2)LEADI,[AX](3)MOVDS,2010(4)PUSHAL(5)OUT900,AL(6)MOV[BX],03.用命令查看8086/8088CPU在开机后执行的第一条指令。4.用命令D查看DS:200~22F和F000:200~22F两内存块内容,用命令F将字符“A”分别填入这两个内存块,比较填入前后结果,了解可读写内存RAM和只读内存ROM的区别。5.用A命令汇编一条INT1C指令,用命令T单步执行该指令,比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况,了解什么是中断向量表,中断向量和中断子程,掌握中断指令的执行过程。6.利用T,P,G命令,执行下列指令段,注意它们的不同之处。(1)MOVDI,300MOVSI,400MOVCX,3CLDREPMOVSBINT3(2)MOVAH,2MOVDL,41INT21INT3(3)先在CS:200处汇编一条RET指令,再在CS:100处汇编。MOVBX,200CALLBXINT3然后从MOVBX,200处开始执行。实验三分支程序实验一、实验目的1)掌握分支程序的设计方法。2)掌握利用DEBUG修改参数、检查结果的方法。3)掌握汇编语言源程序的编辑、汇编、连接及调试过程。二、实验内容1)编写一个程序,显示AL寄存器中的两位十六进制数2)编写一个程序,判别键盘上输入的字符;若是0-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符CR(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。1)显示AL中两位十六进制数程序:;DISPHEX.ASMCODESEGMENTASSUMECS:CODESTART:MOVAL,3EH00111110MOVBL,ALMOVDL,ALMOVCL,4SHRDL,CL逻辑右移4位,dl=00000011CMPDL,9比较JBENEXT1小于等于ADDDL,7NEXT1:ADDDL,30H00000011+00110000dl=33hMOVAH,2ah=00000010INT21H;显示高位ASCII码MOVDL,BLANDDL,0FH0ehCMPDL,9JBENEXT2ADDDL,7NEXT2:ADDDL,30HMOVAH,2INT21H;显示低位ASCII码MOVAH,4CHINT21HCODEENDS;返回DOSENDSTART2)显示键入字符程序;DISPKEY.ASMCODESEGMENTASSUMECS:CODESTART:MOVAH,1;1号功能调用INT21H;等待键入字符,送ALCMPAL,0DH;是否是回车符?JZDONE;是则转DONE退出程序CMPAL,’0’JANEXTCMPAL,’9’JBCHARUPMOVDL,ALMOVAH,2INT21H;显示0~9JMPSTARTCHARUP:CMPAL,41HJANEXTCMPAL,5AHJBCHRDNDISPC:MOVDL,’C’MOVAH,2INT21HNEXT:JMPSTARTCHRDN:CMPAL,61HJBNEXTCMPAL,7AHJANEXTJMPDISPCDONE:MOVAH,4CHINT21H;返回DOSCODE:ENDSENDSTART首先运行程序:对程序进行但不执行,了解程序的运行过程:程序流图:实验四循环程序实验一、实验目的:1)掌握循环程序的设计方法2)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。3)学会针对不同的问题,选用不同的组织循环的方法。二、实验内容1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。2)存储单元DAT1及DAT2中各有10字节的二进制数,高位字节放在高位地址中。试编写一程序将这两个数据相加,结果存放在从DAT3开始的单元中。1)偶校验程序清单:;EX56.ASMDESGSEGMENTSTRNDB‘ASCDEfghijkLMNOPQuvw’,‘$’NDB?DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXLEASI,STRNMOVDL,0AGAIN:MOVAL,[SI]CMPAL,‘$’JEDONETESTAL,0FFHJPENEXTORAL,80HMOV[SI],ALINCDLNEXT:INCSIJMPAGAINDONE:MOVN,DLMOVAH,4CHINT21HCSEGENDSENDSTART;以上是条件控制的循环。因为事先不知道字符串STRN共有多少字符,故采用条件控制的循环程序实现。可以看出,有十个字符进行了偶校验2)加法程序清单:;ADDHEX.ASMCODESEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,CSMOVDS,AXLEASI,DAT1LEADI,DAT2LEABX,DAT3MOVCX,10XORAL,AL;0→CFAGAIN:MOVAL,[SI]ADCAL,[DI]MOV[BX],ALINCSIINCDIINCBXLOOPAGAINMOVAH,4CHINT21HDAT1DB70H,80H,90H,A0H,A1H,A2H,A3HDB74H,65H,56HDAT2DB45H,67H,89H,1AH,2BH,3CHDB4DH,5EH,6FH,04HDAT3DB10DUP(?)CODEENDSENDSTART;本程序中,DS及CS同处一个逻辑段CODE中,所以,应将CS值送至DS中。相当于计算实验五子程序实验(1)一、实验目的1)掌握主程序与子程序之间的调用关系及调用方法。2)掌握子程序调用过程中近程调用与远程调用的区别。3)掌握通过堆栈转送参数的方法。二、实验内容1)将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。在转换过程中,通过子程序DISP实现显示。2)编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。1)码型转换程序清单:;CONV.ASMDATASEGMENTBUFDB0ABH,0CDH,0DEH,01H,02H,03HDB3AH,4BH,5CH,6FHDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,10LEABX,BUFAGAIN:MOVAL,[BX]CALLHEXASCINCBXLOOPAGAINMOVAH,4CHINT21HHEXASCPROCNEARMOVDL,ALPUSHCXMOVCL,4SHRDL,CLPOPCXCALLDISP;显示高位HEX数MOVDL,ALANDDL,0FHCALLDISP;显示低位HEX数RETHEXASCENDPDISPPROPCMPDL,9JBENEXTADDDL,7NEXT:ADDDL,30H;将一位HEX数转为ASCII码MOVAH,2INT21H;显示RETDISPENDPCODEENDSENDSTART2)统计并显示某键入字符的个数的程序::COUNTER.ASMDATASEGMENTCHARDB‘b’BUFDB50H,?50HDUP(?)DATAENDSMCODESEGMENTASSUMECS:MCODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,BUFMOVAH,9INT21HLEASIBUFMOVCL,[SI+1]MOVCH,0;CX中为字符串长度INCSIINCSI;SI指向串首址TABLEMOVAL,CHARMOVAH,0;AX中为待查字符PUSHSIPUSHCXPUSHAX;参数送堆栈CALLCHECKPOPAX;统计个数在AL中MOVDL,CHARMOVAH,2INT21H;显示待检字符MOVDL,ALANDDL,0FHCMPDL,9JBENEXTADDDL,7NEXT:ADDDL,30HMOVAH,2INT21H;显示统计个数MOVAH,4CHINT21HMCODEENDSSCODESEGMENTASSUMECS:SCODECHECKPROCFARPUSHBPMOVBP,SPMOVSI,[BP+10]MOVCX,[BP+8]MOVAX,[BP+6]XORAH,AHAGAIN:CMPAL,[SI]JNENEXT1INCAHNEXT1:INCSILOOPA

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功