您好,欢迎访问三七文档
;实验一汇编程序、链接程序、编辑程序及调试程序的基本使用方法;一、实验目的;1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。;2.掌握字符串的复制,并会用各种方法实现。;3.掌握字符串显示的DOS功能调用。;二、实验内容及要求;1.将以符号地址为ARRAY1开始的字符串“请自己定义”复制到ARRAY2开始的存储单元中并显示在屏幕上。;2.使用三种方法传送:;(1)用MOV指令传送;(2)用基本串传送指令;(3)重复串传送指令MY_DATASEGMENTPARA'DATA';数据段DISP1DB'Howareyou?',0aH,0DH,'$';ARRAY1DB'DI',41H,'NZI09','$';ARRAY2DB20dup(0)MY_DATAENDsMY_CODESEGMENTPARA'CODE';代码段MY_PROCPROCFARASSUMECS:MY_CODE,DS:MY_DATASTART:MOVAX,MY_DATAMOVDS,AXMOVES,AXLEADX,DISP1;显示提示字符串MOVAH,09HINT21H;;开始(1)用MOV指令传送;LEASI,ARRAY1;;LEADI,ARRAY2;;MOVCX,09HLOOP1:;MOVBH,[SI];MOV[DI],BH;INCSI;INCDI;LOOPLOOP1;;开始(2)用基本串传送指令LEASI,ARRAY1;LEADI,ARRAY2;MOVCX,09HCLDLOOP2:MOVSBLOOPLOOP2;;开始(3)重复串传送指令;LEASI,ARRAY1;;LEADI,ARRAY2;;MOVCX,09H;CLD;REPMOVSB;将ARRY2中的字符串显示出来,便于判断是否传送正确。LEADX,ARRAY2;显示信息MOVAH,09HINT21HEXIT:MOVAX,4C00HINT21HMY_PROCENDpMY_CODEENDSENDSTART实验二分支程序设计;一、实验目的;1.掌握分支程序的设计方法。;2.掌握提示信息的使用方法及键盘输入的用法。;3.学会使用字符串比较。;二、实验内容及要求;在屏幕上显示“Pleaseinputyourtelephonenumber:”,根据提示输入8位电话号码,;屏幕上下一行显示“Pleaseinputyour;telephonenumberagain:”,再次输入8位相同电话号码,;比较两次输入的数据,如果相同则显示“Success!”,;不相同则显示“Your;telephonenumberisn’tmatch,pleasetryagain.”,直到输入正确为止。MY_DATASEGMENTPARA'DATA';数据段;开辟输入缓冲区1,存放第一次输入的8位电话号码。NUMBER1DB9;最多可以键入9个字符(包括回车符ODH)ACTLEN1DB?;实际键入的字符数CHARS1DB9DUP('A'),0aH,0DH,'$';实际键入的字符从此开始存放,为了显示输入的号码,特别加了字符串结束标志'$'。;开辟输入缓冲区2,存放第二次输入的8位电话号码。NUMBER2DB9;最多可以键入9个字符(包括回车符ODH)ACTLEN2DB?;实际键入的字符数CHARS2DB9DUP('A'),0aH,0DH,'$';实际键入的字符从此开始存放,为了显示输入的号码,特别加了字符串结束标志'$'。;定义字符串,作为程序运行中的提示。DISP1DB'Pleaseinputyourtelephonenumber:',0aH,0DH,'$'DISP2DB'Pleaseinputyourtelephonenumberagain:',0aH,0DH,'$'RIGHTDB'Success!',0aH,0DH,'$'WRONGDB'Yourtelephonenumberisn',27H,'tmatch,pleasetryagain.',0aH,0DH,'$'YourInputDB'Yourinputis:','$';注意字符串中的“'”要用其ASCII码表示。MY_DATAENDsMY_CODESEGMENTPARA'CODE';代码段MY_PROCPROCFARASSUMECS:MY_CODE,DS:MY_DATASTART:MOVAX,MY_DATAMOVDS,AXMOVES,AXMOVBL,3;允许错误输入的最大次数LEADX,DISP1;显示提示字符串MOVAH,09HINT21HLEADX,NUMBER1;输入8位电话号码,并放入缓冲区NUMBER1MOVAH,0AHINT21HLEADX,YourInput;MOVAH,09HINT21HLEADX,CHARS1;显示输入的8位电话号码。MOVAH,09HINT21HAGAIN:LEADX,DISP2;显示提示字符串MOVAH,09HINT21HLEADX,NUMBER2;再次输入8位电话号码,并放入缓冲区NUMBER2MOVAH,0AHINT21HLEADX,YourInput;显示输入的8位电话号码。MOVAH,09HINT21HLEADX,CHARS2;显示输入的8位电话号码。MOVAH,09HINT21HLEASI,CHARS1;比较两个字符串LEADI,CHARS2;MOVCX,8CLDREPECMPSBJNZEXIT1;不相等的话,跳转到EXIT1LEADX,RIGHT;显示信息MOVAH,09HINT21HJMPEXITEXIT1:LEADX,WRONG;显示信息MOVAH,09HINT21H;JMPAGAINDECBLJNZAGAINEXIT:MOVAH,4CHINT21HMY_PROCENDpMY_CODEENDSENDSTART实验三循环程序设计;一、实验目的;1.掌握循环程序的设计方法。;2.掌握正数、负数及零的判断方法。;3.学习DEBUG的使用。;二、实验内容及要求;1.以符号地址NUM开始的连续存储单元中,顺序存放着16个数(请在实验中随机输入),试统计其中正数、负数及零的个数,并把它们存放;在SI、DI及BX中。;2.程序编写完成后,使用DEBUG查看结果,检验正误。MY_DATASEGMENTPARA'DATA';数据段NUMDB0,0,2,3,4,5,6,1,-2,-3,-4,-5,-6,-7,-8,-9RESDB3DUP(0);定义字符串,作为程序运行中的提示。ZeroDB'Zero:','$'NegativeDB'Negativenumber:','$'PositiveDB'Positivenumber:','$'ReturnDB0aH,0DH,'$';输出回车换行符。MY_DATAENDsMY_CODESEGMENTPARA'CODE';代码段MY_PROCPROCFARASSUMECS:MY_CODE,DS:MY_DATASTART:MOVAX,MY_DATAMOVDS,AXMOVCX,16LEASI,NUMLEADI,RESAGAIN:MOVAL,[SI]CMPAL,00H;与0比较JNENEXT1;不等于0,转移到NEXT1INCBYTEPTR[DI];“0”的个数加1。JMPSTONEXT1:TESTAL,80H;判断最高位是否为1,转移到NEXT1JNZNEXT2;最高位为1,转移到NEXT2INCBYTEPTR[DI+1];正数的个数加1。JMPSTONEXT2:INCBYTEPTR[DI+2];负数的个数加1。STO:INCSI;指向下一个数字LOOPAGAIN;循环,直到16个数字统计完。;以上程序已经完成了实验要求,以下是显示结果。;显示“0”的个数LEADX,Zero;显示提示字符串MOVAH,09HINT21HMOVDL,BYTEPTR[DI]MOVAL,DLCALLBIN2ASCMOVDL,ALNEXT4:MOVAH,2INT21HLEADX,Return;显示提示字符串MOVAH,09HINT21H;显示正数的个数LEADX,Positive;显示提示字符串MOVAH,09HINT21HMOVDL,BYTEPTR[DI+1]CMPDL,9JANEXT5ADDDL,30HJMPNEXT6NEXT5:ADDDL,37HNEXT6:MOVAH,2INT21HLEADX,Return;显示提示字符串MOVAH,09HINT21H;显示负数的个数LEADX,Negative;显示提示字符串MOVAH,09HINT21HMOVDL,BYTEPTR[DI+2]CMPDL,9JANEXT7ADDDL,30HJMPNEXT8NEXT7:ADDDL,37HNEXT8:MOVAH,2INT21HLEADX,Return;显示提示字符串MOVAH,09HINT21HEXIT:MOVAH,4CHINT21HMY_PROCENDp;二进制数(0-F)转换成ASCII(‘0’-‘F’)的子程序。BIN2ASCPROC;要转换的数在AL的低四位,转换结果仍在AL中CMPAL,9JAABCDEFADDAL,30HJMPDONEABCDEF:ADDAL,37HDONE:RETBIN2ASCENDPMY_CODEENDSENDSTART
本文标题:微机原理实验
链接地址:https://www.777doc.com/doc-5607702 .html