汇编上机(实验二)

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

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

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

资源描述

昆明理工大学信息工程与自动化学院学生实验报告(2013—2014学年第一学期)课程名称:汇编与微机接口实验开课实验室:信自楼4442013年12月12日年级计科112学号201110405214姓名周英明成绩实验项目名称实验二循环及分支程序设计指导教师李英娜教师评语教师签名:年月日一、实验目的:1、熟悉并且掌握汇编语言的基本指令;2、熟练地掌握循环与分支程序的设计过程;3、掌握带符号数的比较转移指令:JL、JLE、JG、JGE;4、伪指令EQU及操作符'$'的使用。5、熟悉并且掌握BIOS和DOS中断的调用方法。二、实验要求:A、设计要求1、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,则结束程序,若为其它字符则不显示,继续等待新的字符输入。2、提示编程:①回车字符的ASCII码为0DH②显示字符用INT21H的2号调用B、设计要求已知DATA单元开始存放三个带符号数1、判断三个数是否同号,若同时为正,显示“+”,若同时为负,则显示“—”,否则显不“*”。2、显示三个数中的最小值。c、设计要求编写7c号中断的处理程序,使得调用发生时,在屏幕上输出字符串”姓名+学号”。d、设计要求编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后存入内存缓冲区BUFFER。加密表为:输入数字:0、1、2、3、4、5、6、7、8、9密码数字:7,5,9,1,3,6,8,0,2,4提示:加密可通过XLAT指令完成。要求:键盘输入通过BIOS和DOS中断分别实现。三、实验环境汇编程序:MASM6.15链接程序:LINK.EXE调试环境:DEBUG.EXE四、实验内容(算法及运行结果的截图)A:源代码:datasegment;定义数据段DB0dataendscodesegmentassumecs:code,ds:datamainprocfar;定义main函数pushds;对ds寄存器进栈保护subax,ax;对ax清零pushax;对ax寄存器进栈保护movax,datamovds,ax;将data段地址赋值给dsnext:movah,07h;调用int21键盘输入(无回显)功能int21hcmpal,0dh;回车ascall码为0dhjEend_dcmpal,'0';对数字处理JGEDY0;=0JMPNEXT;'0'...30HDY0:;数字处理函数CMPAL,'9';因为int2107号功能字符信息存于AL中。JLEIS_09CMPAL,'A'JGEDY_A;DAYUAJMPNEXT;'A'...41HDY_A:CMPAL,'Z'JLEIS_AZCMPAL,'a'JGEDY_xA;DAYUxAJMPNEXT;'a'...61HDY_xA:CMPAL,'z'JLEIS_AZJMPNEXTIS_AZ:MOVAH,02MOVDL,'c'INT21HJMPNEXTIS_09:MOVAH,2MOVDL,ALINT21HJMPNEXTend_d:ret;用于调用返回mainendpcodeendsendmain截图:B:源代码:data_CsegmentDATADB1,-3,7;编程所用3个数,该处3数值可任意设定A1DB0A2DB0A3DB0DISP_MESSDB0DH,0AH,'MINIS:';输出字符串D1DB0D2DB0,'H$'data_Cendscodesegmentassumecs:code,ds:data_Cmainprocfarpushds;寄存器进栈保护subax,ax;ax寄存器清零pushax;寄存器进栈保护movax,data_Cmovds,ax;将数据段地址赋值给dsMOVBX,OFFSETDATA;将数据段首地址赋值给bxMOVAL,[BX]INCBXMOVAH,[BX]CMPAL,AH;将bx值取出并进行判断是否已取完JLALAL1;ALAHXCHGAH,ALALAL1:INCBXMOVDL,[BX]CMPAL,DLJLALALXCHGAL,DLALAL:CMPAH,DLJLAL_SMALLXCHGAH,DLAL_SMALL:MOVA1,DLMOVA2,AHMOVA3,ALXORDL,AL;最大和最小数异或ANDDL,80HNOTDLTESTDL,80H;高位为1表示一正一负,否则为全负或全正JEYZYFANDAL,80HNOTALTESTAL,80H;高位为1表示全负JEQFMOVAH,02MOVDL,'+'INT21HJMPDISP_SMALLQF:MOVAH,02MOVDL,'-'INT21HJMPDISP_SMALLYZYF:MOVAH,02MOVDL,'*'INT21HDISP_SMALL:MOVAL,A3MOVAH,ALANDAX,0F00FHMOVCL,4SHRAH,CLCMPAH,0AHJGEIS_AZADDAH,30HMOVD1,AHJMPNN_1IS_AZ:ADDAH,40H-0AH+1MOVD1,AHNN_1:CMPAL,0AHJGEIS_AZ1ADDAL,30HMOVD2,ALJMPNN_2IS_AZ1:ADDAL,40H-0AH+1MOVD2,ALNN_2:MOVAH,09MOVDX,OFFSETDISP_MESSINT21Hretmainendpcodeendsendmain截图:C:源代码:assumecs:codecodesegmentstart:movax,csmovds,ax;将代码段地址交给dsmovsi,offsetdo0movax,0moves,axmovdi,200hmovcx,offsetdo0end-offsetdo0;计算输出字符串长度cldrepmovsb;设置中断向量表movax,0moves,axmovwordptres:[7ch*4],200hmovwordptres:[7ch*4+2],0movax,4c00hint21hdo0:jmpshortdo0startdbwelcomezym201110405214!,0;设置输出字符串do0start:pushcxmovax,csmovds,axmovsi,202hmovax,0b800h;指向显存moves,axmovdi,12*160+30*2;使其显示于屏幕中央show:movcl,[si]movch,0jcxzreturnmoves:[di],clmovch,2moves:[di+1],chincsiadddi,2jmpshowreturn:popcxmovax,4c00hint21hdo0end:nopcodeendsendstart测试代码:assumecs:codecodesegmentstart:int7chmovax,4c00hint21hcodeendsendstart截图:测试函数如下图:D:源代码:datasegmentmsgdb'pleaseinputtennumber:',0dh,0ah,'$'buferdb10dup(?)mimadb7,5,9,1,3,6,8,0,2,4dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovsi,offsetbufermovbx,offsetmimamovdx,offsetmsgmovah,09int21hmovcx,10input:movah,01int21hmovah,0andal,0fhmovdi,axmoval,[bx][di]mov[si],alincsiloopinputmovah,4chint21hcodeendsendstart截图:五、实验总结(程序的优缺点,不足和改进的过程)本次实验是对循环及分支程序的编写,编写的过程中让我对对寄存器的使用又加深了进一步的理解,也在使用的过程中对对loop循环和cx控制有了进一步了解,同时对于进栈,出栈还有中断的运用有了一定认识。

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

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

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

×
保存成功