您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 微机原理实验(含解答程序)
微机原理实验课题(共16个内容,附解答程序)(汇编程序可以使用MASMFORWINDOWS)1.将偏移地址为2000h开始的100个单元依次设置为0~99。。2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。3.编写程序,在屏幕上分行显示自己的姓名、学号。4.编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。在DEBUG下查看执行结果。5.用分支结构设计程序实现符号函数100010xyxx,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。6.在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。7.在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。8.将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。9.编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。10.将字形变量x以二进制数的形式在屏幕上显示输出。11.将字形变量x以十六进制数的形式在屏幕上显示输出。12.将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。13.编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。(要求:在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。(注意:首先判断正负,正数直接转换,负数以补码的形式存放;要求显示输入数据的提示信息,用子程序实现(段内),显示转换后结果结果的功能用子程序实现(段间)15.设计一个密码验证程序,在数据段设定一个密码,程序执行时首先显示输入密码的提示信息,要求输入密码,将输入的密码同设定的密码进行比较,相同则显示欢迎信息,密码错误显示错误信息并要求重新输入,三次错误则显示非法用户信息并退出程序。可以定义宏实现多次需要的操作。16.对以上程序进行修改,对初始密码利用某种算法进行加密,在比较时利用同样的算法对输入密码进行转换后再进行比较,增加对密码的保护。解答程序如下1.将偏移地址为2000h开始的100个单元依次设置为0~99。。STACKlSEGMENTSTACK;8088宏汇编程序DW64DUP(?);定义堆栈段STACKlENDSCODESEGMENTASSUMECS:CODE;定义代码段START:MOVDI,[2000H];程序开始设数据区首址MOVCX,100;字节数送入cx中MOVAL,0000NEXT:MOV[DI],AL;写入一字节INCDI;修改地址指针INCBX;修改数据INCALDECCXJNZNEXTHLTCODEENDS;代码段结束ENDSTART;程序结束2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。STACKlSEGMENTSTACKDW64DUP(?)STACKlENDSDATASEGMENTXL1DW50HXL2DW12HXH1DW30HXH2DW25HYL1DW32HYL2DW55HYH1DW74HYH2DW32HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XL1ADDAX,YL1MOVBP,AXMOVAX,XL2ADDAX,YL2MOVSI,AXMOVAX,XH1ADDAX,YH2MOVDI,AXMOVAX,XH2ADDAX,YH2MOVDX,AXCODEENDSENDSTART3.编写程序,在屏幕上分行显示自己的姓名、学号。datassegmentnamdb'namehulihutu$'numdb'number20121201$'datasendsstackssegmentdw100dup(?)stacksendscodessegmentassumecs:codes,ds:datas,ss:stacksstart:movax,datasmovds,axmovdx,offsetnammovah,9int21hmovdl,0ahmovah,2int21hmovdl,0dhint21hmovdx,offsetnummovah,9int21hcodesegmentendsendstart4.编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。在DEBUG下查看执行结果。datasegmentxdw?pfdb0,01,04,9,16,25,36,49,64,81ydw?promdw'pleaseinputanumber:$'dataendscodesegmentassumeds:data,ss:stack,cs:codestart:movax,datamovds,axmovah,09hmovdx,offsetpromint21hmovah,1int21handal,0fhmovx,axleabx,pfmovax,xxlatmovy,axmovah,4chint21hcodeendsendstart5.用分支结构设计程序实现符号函数100010xyxx,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。DATASSEGMENTxdb-4ydb?;此处输入数据段代码dadb'y=1','$'dendb'y=0','$'xiaodb'y=-1','$'DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXmoval,xcmpal,0JLnextjgnext1movy,0leadx,denmovah,09hint21hjmpnext2next1:movy,1leadx,damovah,09hint21hjmpnext2next:movy,-1leadx,xiaomovah,09hint21hnext2:MOVAH,4CHINT21HCODESENDSENDSTART6.在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。DATASSEGMENTydb'error','$';此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXmovah,1int21hcmpal,61hjgenext1jmpnext4next1:cmpal,7Ahjlenext2jmpnext4next2:subal,20hnext3:movdl,almovah,2int21hjmpnext5next4:leadx,ymovah,09hint21hnext5:MOVAH,4CHINT21HCODESENDSENDSTART7.在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。DATASSEGMENTshuzidb'digital','$'zimudb'letter','$'qitadb'other','$';此处输入数据段代码DATASENDSSTACKSSEGMENTstringdb?;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXmovah,1;此处输入代码段代码int21hcmpal,30hjgenext1jmpnext6next1:cmpal,39hjlenext2cmpal,41hjgenext3jmpnext6next3:cmpal,5Ahjlenext5jmpnext8next8:cmpal,61hjlenext6jgenext4next5:leadx,zimumovah,09hint21hjmpnext7next4:cmpal,7Ahjlenext5jmpnext6next2:leadx,shuzimovah,09hint21hjmpnext7next6:leadx,qitamovah,09hint21hnext7:MOVAH,4CHINT21HCODESENDSENDSTART8.将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。datasegmentxdb15dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmoval,xandal,0fhcmpal,9JBEnextaddal,7next:addal,30hmovah,2movdl,alint21hmovah,4chint21hcodeendsendstart9.编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。DATASSEGMENTsdw?;此处输入数据段代码DATASENDSSTACKSSEGMENTdw64dup(?);此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXmovbx,0001hmovdl,02hlop2:moval,blincdl;加1muldl;无符号数乘法AX=oprd*aladdbx,axcmpax,00C8h;与200比较jnalop2;不高于转移movs,bxmovch,4movcl,4lop1:rolbx,clmovdl,blanddl,0Fhcmpdl,09hjbenext;低于等于转移adddl,7next:adddl,30hmovah,2int21hdecchjnzlop1;非零转移MOVAH,4CHINT21HCODESENDSENDSTART10.将字形变量x以二进制数的形式在屏幕上显示输出。DATASSEGMENTxdw1325h;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXmovbx,xmovcx,10hlop1:rolbx,1;不带cf的循环左移jcnext;进位转移,即cf=1movdl,30h;将0送入dljmpnext2next:movdl,31h;将1送入dlnext2:movah,2int21hlooplop1;循环执行lop1MOVAH,4CHINT21HCODESENDSENDSTART11.将字形变量x以十六进制数的形式在屏幕上显示输出。DATASSEGMENTxdw211dh;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXmovbx,xmovch,4movcl,4lop1:rolbx,clmovdl,blanddl,0Fhcmpdl,09hjbenext;低于等于转移adddl,7next:adddl,30hmovah,2int21hdecchjnzlop1;
本文标题:微机原理实验(含解答程序)
链接地址:https://www.777doc.com/doc-7188924 .html