您好,欢迎访问三七文档
《汇编语言》试验报告班级计134学号139074133姓名颜飞翔指导教师刘恒实验五循环程序实验一、实验目的:1、掌握汇编语言的源程序结构2、熟悉常用的汇编语言指令3、掌握程序的循环结构二、实验内容:1、编程序将符号字数组ARRAYW中的正负数分别送入正数数组PLUS和负数数组MINUS中,同时把0元素的个数送入字变量ZERON.2、利用记事本进行源程序编辑;3、利用汇编语言MASM进行源程序汇编;4、再使用连接程序LINK进行程序连接;5、用debug调试程序。三、实验源码:STACKSEGMENTSTACK'STACK'DW32DUP(0)STACKENDSDATASEGMENTARRAYWDW-5,-4,-3,-1,0,2,3,4,5,6NEQU($-ARRAYW)/2PLUSDWNDUP(0)MINUSDWNDUP(0)ZERONDW0DATAENDSCODESEGMENTASSUMESS:STACK,CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,NMOVBX,0MOVSI,0MOVDI,0MOVZERON,0AGAIN:MOVAX,ARRAYW[BX]ADDBX,2ANDAX,AXJZZERJSMINMOVPLUS[SI],AXADDSI,2JMPCOMMIN:MOVMINUS[DI],AXADDDI,2JMPCOMZER:INCZERONCOM:LOOPAGAINMOVAH,4CHINT21HCODEENDSENDSTART运行结果:四、实验总结:通过本实验,熟悉了循环结构的基本框架,熟悉了LOOP指令的意义和操作。在实验过程中,对一些指令的操作要理解并运用,熟悉各代码所表示的意思和运行的结果。并且在DEBUG命令下调试查看结果。实验六分支程序实验一、实验目的:1、掌握分支程序的设计方法。2、掌握汇编语言源程序的编辑、汇编、连接及调试过程。二、实验内容:1、编写一个程序,显示AL寄存器中的两位十六进制数。2、编写一个程序,判断键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符CR(或其他ASCII码为0DH),则结束程序,若为其他字符则不显示,继续等待新的字符输入。三、实验步骤:1、用EDIT或其他编辑软件,编写.ASM源程序。2、对其进行汇编及连接,产生.EXE文件。3、对.EXE文件进行调试运行。(1)用DEBUG调试运行,学会修改AL内容的方法。(2)对第二个程序键入不同的字符,分别进行调试。(3)在MS-DOS下运行这两个.EXE文件。四、实验源码:1、分支一CODESEGMENTASSUMECS:CODESTART:MOVAL,3EHPUSHAXMOVDL,ALMOVCL,4SHRDL,CLCMPDL,9JBENEXT1ADDDL,7NEXT1:ADDDL,30HMOVAH,2INT21HPOPAXMOVDL,ALANDDL,0FHCMPDL,9JBENEXT2ADDDL,7NEXT2:ADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART2、分支二CODESEGMENTASSUMECS:CODESTART:MOVAH,1INT21HCMPAL,0DHJZDONECMPAL,'0'JBNEXTCMPAL,'9'JACHARUPMOVDL,ALMOVAH,2INT21HJMPSTARTCHARUP:CMPAL,41HJBNEXTCMPAL,5AHJACHRDNDISPC:MOVDL,'c'MOVAH,2INT21HNEXT:JMPSTARTCHRDN:CMPAL,61HJBNEXTCMPAL,7AHJANEXTJMPDISPCDONE:MOVAH,4CHINT21HCODEENDSENDSTART实验七统计不同成绩段学生的人数一、实验目的:1、掌握分支、循环、子程序调用、DOS功能调用等基本的程序结构。2、掌握综合程序的编制及调试方法。二、实验内容:设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。三、编程提示:1、成绩分等部分采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用DOS功能调用。2、统计学生成绩和显示统计结果两部分内容用子程序结构来完成。四、实验报告:源程序清单和执行结果。DATASSEGMENTARRAYDB76,69,84,90,73,88,99,63,100,80STRING1DB'Thenumberof100:$'STRING2DB'Thenumberof90-99:$'STRING3DB'Thenumberof80-89:$'STRING4DB'Thenumberof70-79:$'STRING5DB'Thenumberof60-69:$'STRING6DB'Thenumberbelow60:$'DATASENDSSTACKSSEGMENTSTACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVAL,0;用于计数MOVBX,0MOVCX,0MOVDH,0MOVDL,10;循环次数CALLCOUNTCALLOUTPUTMOVAH,4CHINT21HCOUNTPROCNEAR;子程序一,用来统计各分数段的人数MOVSI,0NEXT:CMPARRAY[SI],100;将分数与100比较JZL1JLNEXT1NEXT1:CMPARRAY[SI],90;与90比较JAEL2JLNEXT2NEXT2:CMPARRAY[SI],80;与80比较JAEL3JLNEXT3NEXT3:CMPARRAY[SI],70;与70比较JAEL4JLNEXT4NEXT4:CMPARRAY[SI],60;与60比较JAEL5INCDHINCSIDECDL;循环次数减1JNZNEXT;若DL尚未减少到零则回到NEXT处执行JMPEXIT;若为零就转到EXIT处执行,退出L1:INCAL;对分数为100的学生的人进行计数INCSIDECDLJNZNEXTJMPEXITL2:INCBH;对分数在90-99的学生的人进行计数INCSIDECDLJNZNEXTJMPEXITL3:INCBL;对分数在80-89的学生的人进行计数INCSIDECDLJNZNEXTJMPEXITL4:INCCH;对分数在70-79的学生的人进行计数INCSIDECDLJNZNEXTJMPEXITL5:INCCL;对分数在60-69的学生的人进行计数INCSIDECDLJNZNEXTEXIT:RETCOUNTENDPOUTPUTPROCNEAR;子程序二,用来输出相关内容MOVAH,0PUSHDXPUSHCXPUSHBXPUSHAXLEADX,STRING1;输出100分的人数MOVAH,9INT21HPOPBXMOVDL,BLADDDL,30HMOVAH,2INT21HCALLENTERLEADX,STRING2;输出90至99分的人数MOVAH,9INT21HPOPBXMOVDL,BHADDDL,30HMOVAH,2INT21HCALLENTERLEADX,STRING3;输出80至89分的人数MOVAH,9INT21HMOVDL,BLADDDL,30HMOVAH,2INT21HCALLENTERLEADX,STRING4;输出70至79分的人数MOVAH,9INT21HPOPBXMOVDL,BHADDDL,30HMOVAH,2INT21HCALLENTERLEADX,STRING5;输出60至69分的人数MOVAH,9INT21HMOVDL,BLADDDL,30HMOVAH,2INT21HCALLENTERLEADX,STRING6;输出低于60分的人数MOVAH,9INT21HPOPBXMOVDL,BHADDDL,30HMOVAH,2INT21HCALLENTERRETOUTPUTENDPENTERPROCNEAR;子程序三,用来在每行输出后回车换行MOVDL,0AHMOVAH,02HINT21HMOVDL,0DHMOVAH,02HINT21HRETENTERENDPCODESENDSENDSTART五、实验总结:通过实验加深了对于子程序、JMP等转移指令以及进栈出栈的了解,能清晰地设计简单的循环、分支程序,掌握了基本的键盘输入及输出。总的来讲,汇编语言程序设计不像C语言那么简洁易操作,经常比较繁琐,难以马上理解,耐心看书,多研究命令,多上机才能深入理解进而有自己的见解,加深我们对硬件与软件认识。
本文标题:汇编第二次实验
链接地址:https://www.777doc.com/doc-5824412 .html