版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国民航大学《微机原理》实验报告 姓名:王鹏飞 学号:111142222 指导教师:谈娴茹实验一Debug命令及汇编指令和寻址的应用实验目的:掌握DEBUG的基本命令及其功能,学会用DEBUG调试程序;掌握8086CPU的指令功能,体会寄存器的作用;了解数据在内存的存放方式和内存操作数的几种寻址方式;了解指令的执行过程。实验内容:1、设堆栈段指针SP=1000H,AX=4000H,BX=8000H;请编写一段程序将AX和BX的内容进行交换。要求:用三种不同的方法。方法一:DATASEGMENTBUFDB?DATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,4000HMOVBX,8000HMOVCX,AXMOVAX,BXMOVBX,CXCODEENDSENDSTART方法二:DATASEGMENTBUFDB?DATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,4000HMOVBX,8000HXCHGAX,BXCODEENDSENDSTART方法三:DATASEGMENTBUFDB?DATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,4000HMOVBX,8000HPUSHAXPUSHBXPOPAXPOPBXCODEENDSENDSTART2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。MOVBX,1000HMOVAX,BXMOVAX,[BX]MOVAX,20[BX]要求:在执行以上指令时,记下当时DS数据段的值,记下每条指令执行后的AX的结果。将以上指令的"BX"修改为DX执行指令,观察结果及结果产生的原因。答:DS数据段的值为13D8H,MOVAX,BX执行后AX的值为1000H,MOVAX,[BX]执行后AX的值为3325H,MOVAX,20[BX]执行后AX的值为14ABH。第一条指令是将1000H送入BX寄存器中,指令二是将BX中的值送入AX中,指令三是将存储器中地址为13D8H:1000H字单元内的值送入AX中,指令四是将存储器地址为13D8H:1020H字单元的值送入AX中。3、已知有如下程序段:MOVAX,3421HMOVCL,4在以上程序段的基础上,分别执行以下指令:ROLAX,CLRORAX,CLSHLAX,CLSHRAX,CLSARAX,CLRCLAX,CLRCRAX,CL试在DEBUG下用A命令汇编以上程序段,用T命令跟踪,观察以下内容:每条指令执行完后,AX寄存器的内容是什么?每条指令执行完成后,进位、符号和零标志位的值有什么变化?答:ROLAX,CLAX=4213H,CF=1,SF=0,ZF=0;RORAX,CLAX=1342H,CF=0,SF=0,ZF=0;SHLAX,CLAX=3420H,CF=1,SF=0,ZF=0;SHRAX,CLAX=0342H,CF=0,SF=0,ZF=0;SARAX,CLAX=0342H,CF=0,SF=0,ZF=0;RCLAX,CLAX=4213H,CF=1,SF=0,ZF=0;RCRAX,CLAX=3342H,CF=0,SF=0,ZF=0;4、设有以下部分程序段:TABLEDW10H,20H,30H,40H,50HENTRYDW4...LEABX,TABLEADDBX,ENTRYMOVAX,[BX]要求:(1)将以上程序段补充成为一个完整的汇编程序。(2)在(1)的基础上编辑、调试并运行程序,记录在执行MOVAX,[BX]后AX的内容。答:(1)DATASEGMENTTABLEDW10H,20H,30H,40H,50HENTRYDW4BUFDB20DUP(?)DATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXLEABX,TABLEADDBX,ENTRYMOVAX,[BX]MOVAH,4CHINT21HCODEENDSENDSTART(2)AX=30H三、心得及收获通过此次实验,我已经熟练掌握了程序上机过程,熟悉了程序的汇编、链接、调试的步骤,掌握了Debug常用命令的功能及命令格式。在程序汇编时发现编写程序存在很多错误,无法生成OBJ文件,原因在于第一次上机编写程序,汇编语言命令和程序格式还不是很熟练,对部分命令功能掌握的并不准确,还有输入上的一些错误等,最后根据错误提示解决了问题,完成了实验,这也让我对这些语言命令更熟悉。实验二汇编语言程序的调试与运行实验目的掌握汇编语言的开发环境和运行过程;熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;熟悉逻辑类指令的用法;掌握传送类指令的功能;掌握顺序程序设计的基本方法。实验内容求单元内存中所定义的两个字节变量的连续内容之和。要求使用三种不同的方法实现,下边给出一种方法,请自己编写出另外两种方法的程序(提示:(1)用定义字的形式实现;(2)用直接寻址方法实现。DATASEGMENTADB5CH,85HBDB43H,0ABHDATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,0MOVAL,A[SI]ADDAL,B[SI]MOVA[SI],ALINCSIMOVAL,A[SI]ADCAL,B[SI]MOVA[SI],ALMOVAH,4CHINT21HCODEENDSENDSTART定义字法:DATASEGMENTADW855CHBDW0AB43HCDW?DATAENDSSTACKSEGMENTSTACKDW10DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,0MOVAX,A[SI]ADDAX,B[SI]MOVC[SI],AXMOVAH,4CHINT21HCODEENDSENDSTART直接寻址:DATASEGMENTADB5CH,85HBDB43H,0ABHDATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAL,[0000]ADDAL,[0002]MOV[0000],ALMOVAL,[0001]ADCAL,[0003]MOV[0001],ALMOVAH,4CHINT21HCODEENDSENDSTART2、编写计算表达式2×(X+Y-50)/Z的值得程序,要求将其商和余数分别放在A、B单元中(设X、Y和Z都是16为有符号数,A、B是字单元,不考虑溢出情况)。DATASEGMENTXDW1234HYDW4567HZDW1321HADW?BDW?DATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,XADDAX,YSUBAX,0032HSHLAX,1IDIVZMOVA,AXMOVB,DXMOVAH,4CHINT21HCODEENDSENDSTART结果:A=09H,B=02A9H3、拆字程序:把偏移地址为1000H中的字内容拆开,并将高字节内容送入4001H单元,将低字节内容送到4002H单元。DATASEGMENTORG1000HDW3456HORG4001HDB?,?DATAENDSSTACKSEGMENTSTACKDW10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVBX,1000HMOVAX,WORDPTR[BX]MOVBX,4001HMOV[BX],AHMOV[BX+1H],ALMOVAH,4CHINT21HCODEENDSENDSTART结果:1000H:56H;1001H:34H;4001H:34H;4002H:56H;三、心得及收获经过实验发现对MUL、IMUL、DIV、IDIV等指令的规则并不明确,在运算时不能正确运用。除此之外当然还对汇编语言命对状态标志位的影响更明确,也明确了字单元的数据在内存中时是高位高字节,低位低字节。通过实验还发现对知识点的学习存在很多盲点,是上课听讲认真程度不够,平时看书太马虎,以后得认真对待。实验三分支结构程序设计实验目的熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;掌握条件转移、无条件转移指令的使用方法;掌握分支程序设计、编写、调试和运行的方法。实验内容编写程序,实现将大写字母字符串转换成小写字符串。设:字符串的首地址为STRING,字符串的长度在LEN单元内。数据段定义如下:DATASEGMENTSTRINGDB‘Iamastudent’LENEQU$-STRINGDATAENDS程序如下DATASEGMENTSTRINGDB'Iamastudent'LENEQU$-STRINGDATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVBX,0000HROLL:MOVAL,BYTEPTR[BX]CMPAL,60HJNCNEXTADDAL,20HMOV[BX],ALNEXT:INCBXCMPBX,LENJCROLLMOVAH,4CHINT21HCODEENDSENDSTART2、内存中定义三个16位数,判断这三个数是否相等。若三个数相等,则显示“Allequal.”,若只有其中两个数相等,则显示“Onlytwoequal.”;否则,显示“Allthreedifferentfromeachother.”。DATASEGMENTADW2345HBDW1234HCDW3214HSTRING1DB"Allequal$"STRING2DB"Onlytwoequal$"STRING3DB"Allthreedifferentfromeachother$"DATAENDSSTACKSEGMENTSTACKDB10DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVBL,AEQCMOVBH,BEQCADDBL,BHSUBBL,1HJCORDER3SUBBL,1HJCORDER2LEADX,STRING1JMPNEXTORDER2:LEADX,STRING2JMPNEXTORDER3:LEADX,STRING3JMPNEXTNEXT:MOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART3、从键盘输入一个字符,判断该字符时小写字母、大写字母、数字或其他字符,并给出相应的提示。DATASEGMENTADB'Thisisacapital',0dH,0aH,'$'BDB'Thisisalowercase',0dH,0aH,'$'CDB'Thisisafigure',0dH,0aH,'$'DDB'Thisisaundefinedcharacter',0dH,0aH,'$'DATAENDSSTACKSEGMENTSTACKDB100DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:CODE,SS:STACKSTART:MOVAX,DATAMOVDS,AXNEXT1:MOVAH,01HINT21HCMPAH,0dHJZEXITCMPAL,30HJSNEXTDCMPAL,3AHJSNEXTCCMPAL,41HJSNEXTDCMPAL,60HJSNEXTACMPAL,61HJSNEXTDCMPAL,7BHJSNEXTBNEXTD:LEADX,DJMPNEXT2NEXTA:LEADX,AJMPNEXT2NEXTB:LEADX,BJMPNEXT2NEXTC:LEADX,CNEXT2:MOVAH,09HINT21HJMPNEXT1EXIT:MOVAH,4CHINT21HCODEENDSENDSTART三、心得及收获由于对条件转移类指令掌握的不到位,在程序中出现了错误的转跳,而且不能输练所有的条件转移指令,导致所编写程序过于冗长繁复,不够简洁。由于对分支结构程序的结构利用不合理,导致程序结构混乱,分支部分不太合理,程序有些头重脚轻。这些问题经过不断的练习后已经有了很大的改善。还有在第三题中对字符分类时,将输入字符的ASCII码与其它字符比较时费了好大劲去查各个字符的ASCII码,最后发现完全不用那么麻烦,直接把两个字符进行比较就行了,这也是由于知识点掌握不全面所致,以后会加强。实验四循环程序设计实验目的掌握循环指令LOOP、LOOPZ、LOOPNZ的使用方法;掌握实现单重、多重循环程序设计、编写、调试和运行的方法。实验内容在数据段变量名为A的数据区内有10个字符,编程实现将这10个字符以相反次序传送到附加段变量名为B的内存区中。源程序已部分给出,请将程序补充完整,并调试运行结果。DATASEGMENTADB'1234567890'NEQU$-ABDBNDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,ALEADI,BADDDI,NMOVCX,NMOVE:MOVAL,[SI]MOVES:[DI],ALINCSIDECDILOOPMOVEMOVAH,4CHINT21HCODEENDSENDSTART编写一个程序,将内存1000H开始的连续100个字节送往1050H开始的连续100个内存单元中。DATASEGMENTADB20DUP(?)DATAENDSSTACKSEGMENTSTACKDB200DUP(0)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVCX,64HMOVSI,1000HMOVDI,1050HADDSI,63HADDDI,63HNEXT:MOVAX,[SI]MOV[DI],AXDECSIDECDILOOPNEXTMOVAH,4CHINT21HCODEENDSENDSTART数据段开始区域中,连续存放着10个无符号数,编写程序找出这10个数中最大的一个数,并将其存放到该数据区的后边。DATASEGMENTADB12H,32H,45H,23H,98H,32H,54H,76H,64H,86HBDB0NEQU$-ADATAENDSSTACKSEGMENTSTACKDB200DUP(0)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXLEABX,AMOVCX,NMOVAL,[BX]ORDER:INCBXCMPAL,[BX]JNBNEXTMOVAL,[BX]NEXT:LOOPORDERMOVB,ALMOVAH,4CHINT21HCODEENDSENDSTART心得及收获本次实验内容是熟悉循环结构程序的编写,循环语句很简单,很容易完成,但在程序中要特别注意的是程序的循环次数。在第二题中我运行了自己编写的程序后发现结果并不像题目所要求的,其它的符合要求,但1000H单元中的内容并未移到1050H单元中。经反复检查发现移位100次应该是从1063H开始到1000H结束,我开始是从1064H开始的,循环了100次之后到1001H结束了,没有达到预期目的,程序错误。所以程序循环次数要特别注意。实验六DOS中断功能调用程序设计实验目的掌握1号、2号、9号和10号DOS系统功能的调用方法和程序设计方法。实验内容编程实现由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。DATASEGMENTADB20DUP(?)DATAENDSSTACKSEGMENTSTACKDB200DUP(0)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXNEXT:MOVAH,01HINT21HCMPAL,0DHJNZNEXTMOVAH,4CHINT21HCODEENDSENDSTART编写一程序,实现从键盘输入一个字符,判断其是不是一个数字,如果是则请输出这个数字,如果不是,请输出“这不是一个数字”的英文信息。DATASEGMENTSTRINGDB'ThisisnotaFigure',0DH,0AH,'$'DATAENDSSTACKSEGMENTSTACKDB200DUP(0)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXNEXT2:MOVAH,08HINT21HCMPAL,0DHJZEXISTCMPAL,30HJBNEXTCMPAL,39HJANEXTMOVDL,ALMOVAH,02HINT21HJMPNEXT3NEXT:LEADX,STRINGMOVAH,09HINT21HNEXT3:JMPNEXT2EXIST:MOVAH,4CHINT21HCODEENDSENDSTART从键盘键入10个字符,然后以与键入相反的顺序输出。DATASEGMENTINFO1DB0DH,0AH,'INPUTSTRING:$'INFO2DB0DH,0AH,'OUTPUTSTRING:$'STRDB20DUP(?)DATAENDSSTACKSEGMENTSTACKDB200DUP(0)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,INFO1MOVAH,09HINT21HMOVCX,0AHLEABX,STRINPUT:MOVAH,01HINT21HMOVSI,CXMOV[BX][SI],ALLOOPINPUTMOVAH,09HLEADX,INFO2INT21HMOVAH,09HLEADX,STRINT21HMOVAH,4CHINT21HCODEENDSENDSTART心得及收获在本次实验中发现对自己对DOS中断功能调用很不熟悉,对各个功能调用入口和出口参数没记清楚,导致了很多错误。在排除这些错误之后发现调用9号功能输出要求字符串后还会跟随很多乱码,最后经过看书才知道9号功能要输出的字符串后必须以“$”结尾。而且编写的程序输入字符时输入一个就结束了,最后经反复改进才可以多次输入。实验八存储器扩展实验实验目的片选存储器扩展方法;了解61C256RAM特性;学习数据存储不同的读写方法;学习片外程序存储器的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅游营销方案及激励(3篇)
- 机电节能专项施工方案(3篇)
- 核心银行活动文案策划方案(3篇)
- 橡胶跑道更换施工方案(3篇)
- 2026-2027学年初中数学七年级上册北师大版(新教材)5.6 应用一元一次方程-追赶小明课时集训卷
- 安全月里说安全
- 安全用火、用电
- 安全用电与电工操作
- 安全用电微课
- 吉林省吉林地区普通高中2025-2026学年高一上学期期末调研测试数学试题
- 北京中学2025-2026学年九年级上学期语文期中试卷(含答案)
- 2025全国新闻记者职业资格考试(新闻采编实务)经典试卷带答案
- 2026年中国工商银行秋季校园招聘考试真题及参考答案(完整版解析)
- 美国白宫 科学:一个新的黄金时代 致总统的报告
- 新三上数学北师版晨读晚默必背知识点
- 老年专科护士汇报
- 医学26年:小肠细菌过度生长 查房课件
- 中国微波消融治疗消化肿瘤指南(2026版)
- 机电综合管线排布避让原则
- 西安工程大学《计算机网络原理》2022-2023学年期末试卷
- 手术室手术室内外温湿度的调控与措施
评论
0/150
提交评论