




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/30微机实验报告微机实验报告曾东明实验一输出字符一、实验目的1通过这个简单的例子熟悉在微机上建立、汇编、链接和运行8086/8088汇编语言程序的过程。2掌握字符的显示方法。3学习DOS系统功能调用。二、实验内容输出字符?A?,程序流程图如图1-1所示。图1-1输出字符?A?程序流程图源程序如下:CODESEGMENTASSUMECS:CODEMOVDL,AMOVAH,2INT21HMOVAH,4CHINT21H2/30CODEENDSEND三、实验设备PC机一台,MASM汇编程序四、实验步骤1用记事本将源程序输入,并存盘。注意:源程序是用汇编语言语句编写的程序,并不能为机器所识别。源程序的扩展名为.ASM2用宏汇编程序将.ASM源程序汇编成机器码的目标文件3用LINK程序产生执行文件4执行程序实验结果:五、心得体会第一次经历了汇编语言的上机过程,对在计算机上进行汇编语言程序设计的步骤不是很熟悉,对命令提示符的一些操作命令不懂,后来查阅了一些资料,比如可以在window7下按住shift,点击鼠标右键,在弹出的窗口里就可以打开命令提示符了。六、思考题3/301请说出一个完整的汇编程序从编写到运行所需的步骤。用编辑程序建立ASM源程序文件用宏汇编程序将.ASM源程序汇编成机器码的目标文件用LINK程序产生执行文件在DOS命令行直接键入文件名执行该文件2修改源程序,改变屏幕显示的内容。修改的源程序:CODESEGMENTASSUMECS:CODEMOVDL,DMOVAH,2INT21HMOVAH,4CHINT21HCODEENDSEND实验二数据的显示实验一、实验目的1掌握屏幕上显示各种进制数据的方法。2掌握将内存中的二进制数转换为十进制、十4/30六进制数的方法。3学会子程序的编写、调用及数据传递方法。二、实验内容1把BX中的无符号二进制数转换成十进制数,在屏幕上显示出来。2把BX中的带符号二进制数转换成十进制数,在屏幕上显示出来。3求一个数据块中的最大元素,并将结果以十进制数的形式在屏幕上显示出来。4求一个数据块中的正数之和和负数之和,并在屏幕上用十进制数的形式分别显示出两个和。5将寄存器BX中的二进制数转换成十六进制数,并在屏幕上显示出来。从高到低依次取出4位二进制数变为ASCII码输出即可。三、实验设备:PC机一台、masm汇编程序四、实验步骤:依照前面介绍的方法,对每一个实验内容对应的程序进行编辑、编译、连接和运行,直到达到实验要求。1实验内容1实验内容1的流程图,如图所示:5/30实验内容1的程序:CODESEGMENTASSUMECS:CODEDEC_DIVMACROMOVAX,BXMOVDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HENDMSTART:MOVBX,0FFFHMOVCX,1000DEC_DIVMOVCX,100DEC_DIVMOVCX,10DEC_DIVMOVCX,16/30DEC_DIVMOVAH,4CHINT21HCODEENDSENDSTART实验结果:2.实验内容2实验容1的程序:DATASEGMENTADW1000BDW100CDW10DDW1DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,0FFEFH;-0017的补码是0FFEFHORBX,BXJNSNEXT7/30NEGBXANDBH,7FHMOVDL,2DHMOVAH,2INT21HNEXT:MOVSI,OFFSETACALLDEC_DIVMOVSI,OFFSETBCALLDEC_DIVMOVSI,OFFSETCCALLDEC_DIVMOVSI,OFFSETDCALLDEC_DIVMOVAH,4CHINT21HDEC_DIVPROCNEARMOVCX,SIMOVAX,BXMOVDX,0DIVCXMOVBX,DX8/30MOVDL,ALADDDL,30HMOVAH,2INT21HRETDEC_DIVENDPCODEENDSENDSTART实验结果:3实验内容3实验内容3的流程图,如图所示:实验3的运行结果:4实验内容4实验内容4的流程图,如图所示:实验内容4程序:DATASEGMENTBLOCKDB-1,-2,-3,-4,-5,-6,-7,-8,-9,-10DB11,12,13,14,15,16,17,18,19,20POSITDW?9/30NEGATDW?BUF1DBPOSIT:$BUF2DBNEGAT:$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCMOVAX,DATAMOVDS,AXMOVBX,OFFSETBLOCKMOVSI,0MOVDI,0MOVCX,20X1:MOVAL,BXCBWCMPAX,0JGEX3ADDDI,AXJMPX2X3:ADDSI,AXX2:INCBXLOOPX1MOVPOSIT,SIMOVNEGAT,DIMOVDX,OFFSETBUF1MOVAH,9INT21HMOVBX,POSITMOVCX,1000CALLDEC_DIVMOVCX,100CALLDEC_DIVMOVCX,10CALLDEC_DIVMOVCX,110/30CALLDEC_DIVMOVDL,0AHMOVAH,2INT21HMOVDX,OFFSETBUF2MOVAH,9INT21HMOVBX,NEGATNEGBXANDBH,01111111BMOVDL,2DH;显示负号MOVAH,2INT21HMOVCX,1000CALLDEC_DIVMOVCX,100CALLDEC_DIVMOVCX,10CALLDEC_DIVMOVCX,1CALLDEC_DIVMOVAH,4CHINT21HDEC_DIVPROCNEARMOVAX,BXMOVDX,011/30DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRETDEC_DIVENDPCODEENDSENDSTART实验结果:5.实验内容5实验内容5的流程图,如图所示:图2-4内容5流程图实验内容5的源程序,参考如下:CODESEGMENTASSUMECS:CODEBINHEXPROCFARMOVCH,4MOVBX,100012/30ROTATE:MOVCL,4ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,3AHJLOUTPUTADDDL,7OUTPUT:MOVAH,2INT21HDECCHJNEROTATEMOVDL,HMOVAH,2INT21HMOVAH,4CHINT21HBINHEXENDPCODEENDSENDBINHEX实验结果:五、心得体会实验内容1:13/30宏定义必须先定义,后调用,自己刚开始时把宏定义放在调用的后面,导致程序出错。看了生产的LIST给出的源程序和目标程序,发现每个宏调用处,通过宏扩展,宏体中的指令的机器代码被插入到宏调用处,不节省内存单元,但相对于子程序,简化了源程序。实验内容2:刚开始的时候给BX寄存器送负值,比如-17,我写成了1000000000010001即MOVBX,8011H,后来发现显示出来的数不是-17。经过思考,懂得原来负数的表示要用补码,下面是两种LIST文件里对应地方的目标程序和源程序,可以看出转化为目标程序的时候,用补码表示。0000BBFFEF0000BBFFEFSTART:MOVBX,-0011HSTART:MOVBX,0FFEFH实验内容3:求一个数据块中最大元素的时候,把数据块中的第一个元素AL中,并通过循环把其余的元素和AL比较,如果新元素较大的话就取代原来的元素放到AL中。比较完成后,把最大的元素放到预先为其保留的地址中,注意要控制的次数CX,是数据块的个数减一。LOOP标号功能相当于DECCX14/30JNZ标号实验内容4:回车和换行的效果不一样。显示字符串的时候要注意用$。因为要将正数与负数分别累加,这时候需要分支,而分支的条件有很多种,比如跟0比较大小,比如通过提取符合位来判断,只要能正确实现分支都可以。实验内容5:16位的二进制数,4位一组可以显示为4位十六进制数,从高到低依次取出4位二进制数变成ASC码输出即可。要注意ASICC代码中,1-9的ASICC代码要比1-9的二进制值大30H,A-F的ASICC代码要比1-9的二进制值大37H,所以对不同的四位二进制,要加个判断分支,才能找到相应得ASICC代码。六、思考题1请总结显示寄存器或者内存中的十进制和十六进制数据的方法。十进制显示的方法:先判断是正数负数,是负数要把它转化成负数的绝对值,并在前面加一个负号。把BX中的数按位由高到低转化成十进制数,即15/30依次对其除以10000、1000、100、10、1,将获得的商放到DL中,加30H变成ASC码,调用DOS系统中断INT21H的2号功能显示出来;对于每一位十进制数的获得和显示,实验通过编制子程序DEC_DIV并不断调用来实现。十六进制的显示方法:16位的二进制数,4位一组可以显示为4位十六进制数,从高到低依次取出4位二进制数变成ASC码输出即可,可以用循环左移的指令POL,循环左移四位,并提取这四位。2请总结子程序编写、调用及参数传递的要点。子程序定义格式如下:过程名PROCNEAR/FARRET过程名ENDP调用的时候用CALL过程名参数传递有三种方法:通过地址表传递参数地址,这种方式适合于参数较多的情况,但要求事先建立一个用来传送参数的地址。通过堆栈传递参数。为了利用堆栈传递参数,必须在主程序中调用子程序之前的地方,把这些参数压入堆栈后利用在子程序中的指令从堆栈弹出而取得参数。同样,要从子程序传递回调用程序的参数也被16/30压入堆栈内,然后由主程序中的指令把这些参数从堆栈中取出。3修改源程序,改变屏幕显示的内容。1:2:3:4:5:实验三从键盘上输入数据实验一、实验目的1掌握从键盘上输入数据的方法。2键盘上输入的是ASCII字符,掌握如何将ASCII字符转换为机内数字。二、实验内容1从键盘上输入一个十进制数,转换成二进制数并放入寄存器BX中。2从键盘上输入065535范围的一个十进制17/30数,在屏幕上显示出相PC机一台、masm汇编程序三、实验设备PC机一台、masm汇编程序四、实验步骤:依照上次实验步骤,对每一个实验内容对应的程序进行编辑、编译、连接和运行,直到达到实验要求。1.实验内容1的程序:CODESEGMENTASSUMECS:CODESTARTPROCCALLDECBINMOVDL,0DHMOVAH,2INT21HCALLXIANSHIMOVAH,4CHINT21HSTARTENDPDECBINPROCNEARMOVCX,10MOVBX,018/30LOP1:MOVAH,1INT21HCMPAL,30HJLEXITCMPAL,39HJGEXITSUBAL,30HMOVAH,00HXCHGAX,BXMULCXADDBX,AXJMPLOP1EXIT:RETDECBINENDPXIANSHIPROCNEARLP1:MOVCX,10000CALLDEC_DIVMOVCX,1000CALLDEC_DIVMOVCX,100CALLDEC_DIVMOVCX,1019/30CALLDEC_DIVMOVCX,1CALLDEC_DIVRETXIANSHIENDPDEC_DIVPROCNEARMOVAX,BXMOVDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRETDEC_DIVENDPCODEENDSENDSTART运行结果:输入11111后,程序显示如图所示:2.实验内容220/30STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTARTPROCMOVAX,STACKMOVSS,AXCALLDECBINCALLXIANSHMOVDL,0AHMOVAH,2INT21HMOVCH,4CALLROTATEMOVAH,4CHINT21HSTARTENDPXIANSHIPROCNEARPUSHBXLP1:MOVCX,10000CALLDEC_DIVMOVCX,100021/30CALLDEC_DIVMOVCX,100CALLDEC_DIVMOVCX,10CALLDEC_DIVMOVCX,1CALLDEC_DIVPOPBXRETXIANSHIENDPDEC_DIVPROCNEARMOVAX,BXMOVDX,0DIVCXMOVBX,DXMOVDL,ALDECBINPROCNEARADDDL,30HMOVAH,2INT21HRETDEC_DIVENDPMOVMOVLOP1:MOVINT22/30CMPJLCMPJGSUBMOVXCHGMULADDJMPEXIT:RETDECBINENDPROTATEPROCLOP2:MOVROLMOVANDADDCMPJLADD23/30OUTPUT:MOVINTDECJNEMOVMOVINTRETCX,10BX,0AH,121HAL,30HEXITAL,39HEXITAL,30HAH,00HAX,BXCXBX,AXLOP1CL,4BX,CLDL,BLDL,0FHDL,30HDL,3AHOUTPUT;小于转移DL,7AH,221HCHLOP2DL,HAH,221HROTATEENDPCODEENDSENDSTART运行结果:输入00010,显示结果如图3-4所示:五、心得体会在写实验二的时候,调用子程序的地方比较多,可是调用子程序的时候,没有对寄存器的数据进行保护,导致程序的执行结果不正确,后来用压栈会保护寄存器里24/30的数据,并用出栈来恢复寄存器的数据,使程序的执行结果正确。六、思考题1请总结从键盘上输入字符的方法。从键盘上输入一个十进制数,转换成二进制数并放入寄存器BX中。对于输入的字符,先判断它是不是19的数字字符,若不是,直接跳出循环,若是的话,将ASC码转化成对应数值并存到AX中,对于下一个输入的数值,判断完成后,通过将AX和BX内容交换并将AX中的数*10,再累加实现。2请总结将二进制数转换为十六进制数并显示的方法。16位的二进制数,4位一组可以显示为4位十六进制数,从高到低依次取出4位二进制数变成ASC码输出即可,可以用循环左移的指令POL,循环左移四位,并提取这四位。3修改源程序,改变屏幕显示的内容。实验内容1:输入22222,显示实验内容2:输入12,显示实验四字符串的显示实验一、实验目的:掌握字符串的显示方法。25/30二、实验内容:1.在内存中存有一个字符串,以0为结尾,程序开始输出“HELLO”然后等待从键盘输入一个字符,在字符串中寻找该字符,若找到,输出“yes”;若找不到,输出“no”,然后再输入下一个字符。2.实验内容的程序是一个无限循环的程序,若按“ESC”键,让程序推出循环,使系统返回DOS。已知“ESC”键的键值是1BH。按照上面的要求对实验内容的程序进行修改,然后再重新汇编、链接和运行。三、实验设备:PC机一台、masm汇编程序四、实验步骤:1.实验内容1实验内容1程序:DATASEGMENTSTR1DBHELLO,0DH,0AH,$STR2DB20H,YES,0DH,0AH,$STR3DB20H,NO,0DH,0AH,$STR4DB123045ABa=!?,00HDATAENDSCODESEGMENT26/30ASSUMECS:CODE,DS:DATASTARTPROCFARMOVAX,DATAMOVDS,AXMOVDX,OFFSETSTR1MOVAH,9INT21HLOOP1:MOVAH,1INT21HMOVBX,OFFSETSTR4GON:MOVAH,BXCMPAH,0JZNOINCBXCMPAH,ALJNZGONMOVDX,OFFSETSTR2GO:MOVAH,9INT21HJMPLOOP1NO:MOVDX,OFFSETSTR3JMPGO27/30STARTENDPCODEENDSENDSTART运行结果2、实验内容2实验内容2程序:DATASEGMENTSTR1DBHELLO,0DH,0AH,$STR2DB20H,YES,0DH,0AH,$STR3DB20H,NO,0DH,0AH,$STR4DB123045ABa=!?,00HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARMOVAX,DATAMOVDS,AXMOVDX,OFFSETS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025草坪修剪项目政府采购与生态修复合同
- 2025叉车租赁合同协议-仓储物流设施升级改造
- 2025版商场档口租赁合同(含品牌形象维护责任)
- 2025年泰州二手房买卖合同+智能家居设备安装服务合同
- 2025版智能通风排烟系统安装与能源审计合同样本
- 2025年度智能安防系统采购意向协议书
- 2025年大学兼职教师合作开发与成果转化协议
- 2025版核能设备监造与核安全防护合同
- 2025版农业合作社股权变更与乡村振兴战略实施协议
- 2025版房地产开发企业委托反担保合同范本
- 行为金融学案例
- 万科集团财务管理制度手册207
- “李可中医药学术流派论治厥阴病”-课件
- 通用技术作品设计报告
- 城市规划原理课件(完整版)
- 锚杆支护技术规范正式版本
- 隐形眼镜经营管理制度
- 下一代互联网技术
- 皮肤知识与问题性皮肤分析(入行必看)
- 单位消防安全评估报告(模板)
- 电子加速器辐照项目可行性研究报告写作范文
评论
0/150
提交评论