您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 华北电力大学汇编实验报告
华北电力大学实验报告||实验名称汇编语言程序设计实验课程名称IBM-PC汇编语言程序设计||专业班级:计科1103学生姓名:李庆贺学号:201109010307成绩:指导教师:王保义实验日期:1月华北电力大学实验报告-2-实验一用表格形式显示字符一、实验要求按15*16列的表格形式显示ASCⅡ码为10H—100H的所有字符,即以行为主的顺序及ASCⅡ码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符隔开。二、设计说明(1)显示每个字符可使用功能号为02的显示输出功能调用:Movah,02hMovdl,输出字符的ASCⅡ码Int21h将dl初始化为10H,然后使用其加1以取得下一个字符的ASCⅡ码。(2)显示空白符是,用其ASCⅡ码置0入dl寄存器。每行结束时,用回车和换行来结束本行并开始下一行。(3)由于逐个显示相继的ASCⅡ码字符是,需要不断修改dl寄存器的内容,而显示空白、回车、换行也需要使用dl寄存器,为此可使用堆栈保存dx。三、实验程序及调试结果prognamsegmentmainprocfarassumecs:prognamstart:movah,02hmovdl,10h;设置初始输出为ASCII的10hmovbl,15;输出显示为15行e:movcx,16;设置循环次数,16,表示输出显示为16列l:int21h;显示输出pushdx;推入堆栈movah,02hmovdl,0int21hmovah,02hmovdl,0int21h;显示空白符popdx;将栈顶元素推出incdl;设置下一个元素loopl;循环输出每行的16个ASCII元素pushdx;将下一行的首元素推入堆栈华北电力大学实验报告-3-movah,02hmovdl,0dhint21hmovah,02hmovdl,0ahint21h;输出换行popdx;将栈顶元素推出decblcmpbl,0;比较确定是否已经输出15行元素jnee;若还未完成输出,则跳转至e,继续进行下一行元素的输出jeexit;否则退出程序exit:movax,4c00hint21hmainendpprognamendsend;start实验二查找匹配字符串一、实验要求程序接受用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“Nomatch!”;如果句子中包含关键字则显示“match!”,且把该字在句子中的位置用十六进制数显示出来。要求程序的执行过程如下:Enterkeyword:abcEntersentence:wearestudyingabcMatchatlocation:11HofthesentenceEntersentence:xyz华北电力大学实验报告-4-Nomatch!Entersentence:二、设计说明程序由三部分组成:(1)输入关键字和一个句子,分别存入相应的缓冲区中。(2)在句子中查找关键字(3)输出信息。用功能调用09h分‘找到’和‘未找到两种情况分别显示不同的信息。在“找到”时,显示关键字在字符串中位置。三、使用说明根据提示输入关键字和句子,按回车键结束输入。程序将显示字符串中是否含有关键字,有则提示‘match’并显示关键字位置,无则提示‘nomatch’。四、实验程序datareasegment;输入数据段keyadrlabelbytekeymaxdb20keyactdb?keystringdb20dup(?);定义能放入50个字符缓存空间的大小,带输入数据长度未知senadrlabelbytesenmaxdb50senactdb?secstringdb50dup(?)messkeydb'Enterkeyword:','$'messsendb0dh,0ah,'EnterSentence:','$'nomatchdb0dh,0ah,'Nomatch.','$'matchdb0dh,0ah,'Matchatlocation:','$'restdb'Hofthesentence.','$'datareaends;设置dos显示端内容prognamsegmentmainprocfarassumecs:prognam,ds:datarea,es:datareastart:pushdsxorax,ax;ax寄存器清0pushaxmovax,datareamovds,ax华北电力大学实验报告-5-moves,axleadx,messkeymovah,09hint21h;显示messkey字符内容leadx,keyadrmovah,0ahint21h;是实现DOS调用中的0a号功能,就是在屏幕上显示keyadr字符串leadx,messsenmovah,09hint21hleadx,senadrmovah,0ahint21hmoval,senactsubal,keyactjlnmatch;长度比较,句子长度短,没有找到跳到nmatch子语句callsearchjmpshorte0;无条件跳转;以上均为DOS上让其显示这些内容nmatch:leadx,nomatchmovah,09hint21he0:retmainendp;结束searchprocnearxorcx,cx;cxqinglingmovdx,offsetsenadr;句子地址到dxadddl,senact;句子changduincdl;置长度加1得到句子最后一位movcl,keyact;关键字长度到clcld;清除方向标志leadi,secstringr0:leasi,keystringrepzcmpsb;如果si和di所指向的两个字节相等,则继续比较。所以如果相等的话,就停止循环。但是这时候si和di已经自动加1了,如果要找不相等的那两个数,就要把si和di减1。moval,byteptr[si-1]cmpal,byteptr[di-1];把那两个不相等的字节放到ptr数组中去jnznext;为0?,跳到next子语句subsi,offsetkeystring;获得操作数keystring的偏移地址movax,sicmpal,keyact;将关键字与secstring长度比较华北电力大学实验报告-6-jeshowpnext:movcl,keyactcmpdi,dxjnzr0shown:leadx,nomatchmovah,09hint21h;在屏幕上显示nomatch字符串jmpshorte1showp:leadx,matchmovah,09hint21h;在屏幕上显示match字符串decdi;句子与关键字匹配最后一位的下一位,所以要见1位movbx,di;xorax,axmoval,keyactsubbx,ax;句子长度减去关键字长度movax,offsetsenadrsubbx,axcallbinihexleadx,restmovah,09hint21he1:retsearchendpbinihexprocnearmovch,4r1:movcl,4;左移4位rolbx,clmovdl,blanddl,0fhadddl,30hcmpdl,39hjledispadddl,07hdisp:movah,02hint21hdecchjnzr1华北电力大学实验报告-7-retbinihexendpprognamendsendmain五、程序框图华北电力大学实验报告-8-实验三分类统计字符个数一、实验要求程序接受用户键入一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字、其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。二、设计说明(1)程序可采用01H功能调用把键入字符先分类计数再存入缓冲区中。(2)程序进入debug运行并查看计数结果。三、实验程序DATASEGMENTPARSDB80;准备接收80个字符.NNNDB?;用于存放实际输入的个数.IIIDB80DUP(?);80字节的空间.D_NDB?C_NDB?O_NDB?MESG1DB13,10,'InputSTR:$';用于提示.MES_CDB13,10,'CharNis:$';用于提示.MES_DDB13,10,'DigitNis:$';用于提示.MES_ODB13,10,'OtherNis:$';用于提示.MES_TDB13,10,'AllNis:$';用于提示.DATAENDS;---------------------------------------------------华北电力大学实验报告-9-CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVD_N,0MOVC_N,0MOVO_N,0MOVDX,OFFSETMESG1MOVAH,9;9号功能调用,显示提示.INT21HMOVDX,OFFSETPARSMOVAH,10;10号功能调用,接收键盘输入.INT21H;---------------------------------------------------MOVCL,NNN;收到字符的个数.MOVCH,0CMPCX,0JNZDO_ITJMPEXITDO_IT:LEASI,III;收到字符的起始地址.;----------------------------下面开始循环统计.AGAIN:MOVAL,[SI]D_num:CMPAL,':';-':'JNCN_C_B;'9'CMPAL,'0'JCN_C_B;'0'INCD_N;数字个数加一.JMPNEXTN_C_B:CMPAL,'[';-'['JNCN_C;'Z'CMPAL,'A'JCN_C;'A'INCC_N;大写,加一.JMPNEXTN_C:CMPAL,'{';-'{'JNCOTHER;'z'华北电力大学实验报告-10-CMPAL,'a'JCOTHER;'a'INCC_N;小写,加一.JMPNEXTOTHER:INCO_N;其它.NEXT:INCSILOOPAGAIN;----------------------------统计结束MOVDX,OFFSETMES_DMOVAH,9;9号功能调用,显示提示.INT21HMOVAL,D_NCALLDISP_ALMOVDX,OFFSETMES_CMOVAH,9;9号功能调用,显示提示.INT21HMOVAL,C_NCALLDISP_ALMOVDX,OFFSETMES_OMOVAH,9;9号功能调用,显示提示.INT21HMOVAL,O_NCALLDISP_ALMOVDX,OFFSETMES_TMOVAH,9;9号功能调用,显示提示.INT21HMOVAL,NNNCALLDISP_AL;----------------------------显示结束.EXIT:MOVAH,4CHINT21H;============================DISP_AL:;以3位十进制数形式显示AL中的内容.MOVAH,0MOVBL,100DIVBLADDAL,30H华北电力大学实验报告-11-MOVDL,ALMOVBH,AHMOVAH,2INT21HMOVAH,0MOVAL,BHMOVBL,10DIVBLADDAL,30HMOVDL,ALMOVBH,AHMOVAH,2INT21HADDBH,30HMOVDL,BHMOVAL,AHMOVAH,2INT21HRET;============================CODEENDSENDSTART四、使用说明程序进入后提示输入字符,可以输入任意字符,输入完成后键入回车键表示完成,则会在下一行输出实验结果。五、程序框图华北电力大学实验报告-12-实验心得体会:这次汇编实验历时一周,但我用了3天时间完成了3个编程实验:用表格形式显示字符、查找匹配字符串、分类统计字符个数,由于期间要考试所以就没有做第四个。用表格形式显示字符和查找匹配字符串是使用了循环程序设计思想。显示字符实验较为简单,只需要一些基础知识即
本文标题:华北电力大学汇编实验报告
链接地址:https://www.777doc.com/doc-5039948 .html