微机原理实验报告1_第1页
微机原理实验报告1_第2页
微机原理实验报告1_第3页
微机原理实验报告1_第4页
微机原理实验报告1_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理实验报告班级:电气93姓名:党尧学号:09041059实验一:顺序程序的设计实验目的:学习8086/8088指令系统中一些基本指令的用法和程序设计的基本方法。熟悉在PC机上建立、汇编、链接、调试和运行8086、8088汇编语言程序的全过程。实验内容:设a、b、c、d四个数分别以胆子解压缩BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d)并将结果放在Y1单元,将结果在屏幕上显示出来。 在DEBUG中,不断改变a,b,c,d内容并查看结果。a=09,b=06,c=04,d=07a=38,b=41,c=29,d=34a=70,b=23,c=42,d=41a=63,b=73,c=62,d=50程序框架:DESG SEGMENT :定义数据段NUM DB 13H,27H,11H,12H :定义a,b,c,dY1 DB ?DSEG ENDS :数据段定义结束SSEG SEGMENTPARASTACK :定义堆栈段DB 20 DUP(?)SSEG ENDS :堆栈段定义结束CSEG SEGMENT :定义代码段ASSUME CS:CSEG,DS:DSEG,SS:SSEG :各段定义START: MOV AX,DSEG MOV DS,AX :数据段段地址送DS MOV AX,SSEG MOV SS,AX :堆栈段段地址送SS根据程序流程编制计算(a+b)-(c+d)的指令序列,结果送AL将变成提示中,单字节压缩BCD码显示程序放于此MOV AX,4C00HINT 21H CSEG ENDS END START程序内容:DSEGSEGMENTNUMDB13H,27H,11H,12HY1DB?DSEGENDSSSEGSEGMENTPARASTACKDB20DUP(?)SSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXMOV AL,NUM :数据a送ALADD AL,NUM+1 :将a+b存储到ALDAA :压缩BCD码加法调整MOV CL,AL :保存AL内容MOV AL,NUM+2 :数据c送ALADD AL,NUM+3 :将c+d存储到ALDAA :压缩BCD码加法调整SUB CL,AL :将(a+b)-(c+d)存储到CLMOV AL,CL :CL送ALDAS :压缩BCD码减法调整MOV Y1,AL :送出结果显示压缩BCD码:MOV BL,AL :保存AL中的内容AND AL,0F0H :取AL中高四位MOV CL,4SHR AL,CL :BCD码高位移到低位ADD AL,30H :(AL)加30H得ASCII码MOV DL,ALMOV AH,02HINT 21H :显示(DL)MOV AL,BL :恢复(AL)AND AL,0FH :取(AL)低四位ADD AL,30H :(AL)30H得ASCII码MOV DL,ALMOV AH,02HINT 21H :显示(DL)返回DOS : MOV AX,4C00HINT 21HCSEGENDSENDSTART实验分析:运用debug程序的-u命令可见程序反汇编内容:之后用–g及–r命令可观察每一步程序进行后AL中存储内容的变化: 0BD9:0000 B8D60B MOV AX,0BD6 0BD9:0003 8ED8 MOV DS,AX 0BD9:0005 B8D70B MOV AX,0BD7 0BD9:0008 8ED0 MOV SS,AX 0BD9:000A A00000 MOV AL,[0000] :AL=13 0BD9:000D 02060100 ADD AL,[0001] :AL=3A 0BD9:0011 27 DAA :AL=40 0BD9:0012 8AC8 MOV CL,AL 0BD9:0014 A00200 MOV AL,[0002] :AL=11 0BD9:0017 02060300 ADD AL,[0003] :AL=23 0BD9:001B 27 DAA :AL=23 08D9:001C 2AC8 SUB CL,AL 0BD9:001E 8AC1 MOV AL,CL :AL=1D 0BD9:0020 2F DAS :AL=17 08D9:0021 A20400 MOV [0004],AL-g24后-r命令可见: AX=0B17 BX=0000 CX=0012 DX=0000 SP=0014 BP=0000 SI=0000 DS=0BD6 SS=0BD7 CS=0BD9 IP=0024可知此时程序已将(a+b)-(c+d)结果17存入到AL中。每组数据实验程序运行结束后,应用–e命令更改a,b,c,d数值继续进行实验内容:-e0000得到:0BD6:0000 13.键入新的a值。同理更改b,c,d值后继续实验。实验思考题:若a=90,b=34,c=33,d=44a=12,b=19,c=25,d=33观察结果,改进程序使结果正确。1.若a=90,b=34,c=33,d=44,则a+b=124,执行(a+b)ADD后AL中存储内容显示为24H,而c+d未出现近卫,执行(c+d)后响应的AL为77,因此执行(a+b)-(c+d)时需要使用带借位减法指令SBB,即将SUB CL,AL改为:SBB CL,AL即可,执行结果为47正确。2.若a=12,b=19,c=25,d=33,则(a+b)-(c+d)结果为负,这时候需要加入判断语句:即在减法前加入:JL LESS即当(a+b)小于(c+d)时,减法改为(c+d)-(a+b),然后在显示结果时在数字前加入负号。修改后程序即在减法进行前加入判断语句JL LESS,再在程序最后加入子程序LESS:SUB AL,CL 存储结果至Y1 显示部分程序在第一次显示DL前加入:MOV DX,2DH :显示负号即可,执行结果为-27正确。实验二:分支程序的设计实验目的:学习提示信息的显示及键盘输入字符的方法。掌握分支程序的设计方法。实验内容:在显示信息下,从键盘上输入原码表示的二位十六进制有符号数:当此数大于0时,屏幕上显示此数为正数;当此数等于0时,屏幕上显示此数为零;当此数小于0时,屏幕上显示此数为负数。程序框架:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMESS1 DB‘INPUTDATA:’,0DH,0AH,‘$’MESS2 DB‘THISDATAIS+’,0DH,0AH,‘$’MESS3 DB‘THISDATAIS-’,0DH,0AH,‘$’MESS4 DB‘THISDATAISZERO’,0DH,0AH,‘$’ :定义结果信息 DATABUF DB 3 :定义最大可能输入字符长度 ACTLEN DB ? :实际输入字符长度 STRING DB 3 DUP(?) :输入字符缓冲区 DATA ENDS SSEG SEGMENT PARA STACK‘STACK DB 50 DUP(0) SSEG ENDS CODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DATA :各段定位START MOV AX,DATA MOV DS,AX :DS段寄存器赋值 MOV AX,SSEG MOV SS,AX :SS段寄存器赋值 MOV DX,OFFSETMESSI MOV AH,09H INT 21H MOV AH,AH :显示提示信息 MOV DX,OFFSETDATABUF INT 21H :接受键入的字符串 CRLF :回车换行 MOV AL,STRING CMP AL,38H …… 根据程序框图编写判断输入数据情况程序段 CODE ENDS :代码段结束 END START :程序结束程序框图:开始 初始化显示提示信息从键盘接收字符接受字符高位送ALYSEYSEAL>=38H?NONO NOAL=30H?YSE接受字符低位送ALNONOAL=30H?YES 显示此数为负 显示此数为正 显示此数为0结束程序内容:CRLF MACROMOV AH,02HMOV DL,0DHINT21HMOV AH,02HMOV DL,0AHINT 21HENDMDATASEGMENTMESS1DB'INPUTDATA:',0DH,0AH,'$'MESS2DB'THISDATAIS+',0DH,0AH,'$'MESS3DB'THISDATAIS-',0DH,0AH,'$'MESS4DB'THISDATAIS0',0DH,0AH,'$'DATABUFDB 3ACTLENDB ?STRINGDB 3DUP(?)DATAENDSSSEGSEGMENTPARASTACK'STACK'DB 50DUP(0)SSEGENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:SSEGSTART:MOVAX,DATAMOVDS,AXMOVAX,SSEGMOVSS,AXMOVDX,OFFSETMESS1MOVAH,09HINT 21HMOVAH,0AHMOVDX,OFFSETDATABUFINT 21HCRLFMOVAL,STRINGCMPAL,38H :比较输入数的ASCII码与38HJGE NEGT :大于0则跳到NEGT程序段CMPAL,30H :比较输入数与00的ASCII码JZ GOON :为0跳到GOON程序段MOVDX,OFFSETMESS2 :上述不成立则显示此数为正MOVAH,09HINT 21HJMP DONEDONE:MOV AH,4CHINT 21HNEGT:MOV DX,OFFSETMESS3 :显示此数为负MOV AH,09HINT 21HJMP DONEGOON:MOV AL,STRING+1CMP AL,30HJZ ZERO :为0则跳到ZERO程序段MOV DX,OFFSETMESS2 :显示此数为正MOV AH,09HINT 21HJMP DONEZERO:MOV DX,OFFSETMESS4 :显示此数为0MOV AH,09HINT21HJMP DONECODEENDSENDSTART实验分析:运用debug程序的-u命令可见程序反汇编内容:之后用–g命令可观察每一步程序进行后的程序进程:0BDB:0000 B8D60B MOV AX,0BD60BDB:0003 8ED8 MOV DS,AX0BDB:0005 B8E10B MOV AX,0BE10BDB:0008 8ED0 MOV SS,AX0BDB:000A BA0000 MOV DX,00000BDB:000D B409 MOV AH,090BDB:000F CD21 INT 21 :显示INPUTDATA0BDB:0011 B40A MOV AH,0A0BDB:0013 BA4100 MOV DX,00410BDB:0016 CD21 INT 21 :输入数据0BDB:0018 B402 MOV AH,020BDB:001A B20D MOV DL,0D0BDB:001C CD21 INT 210BDB:001E B402 MOV AH,020BDB:0020 B20A MOV DL,0A0BDB:0022 CD21 INT 210BDB:0024 A04300 MOV AL,[0043]0BDB:0027 3C38 CMP AL,380BDB:0029 7D12 JGE 003D0BDB:002B 3C30 CMP AL,300BDB:002D 7417 JZ 00460BDB:002F BA0E00 MOV DX,000E0BDB:0032 B409 MOV AH,090BDB:0034 CD21 INT 210BDB:0036 EB01 JMP 00390BDB:0039 B44C MOV AH,4C 0BDB:003B CD21 INT 21分3步观测此段程序:输入正数0BDB:0016 CD21 INT 21 :输入正数370BDB:0018 B402 MOV AH,020BDB:001A B20D MOV DL,0D0BDB:001C CD21 INT 210BDB:001E B402 MOV AH,020BDB:0020 B20A MOV DL,0A0BDB:0022 CD21 INT 210BDB:0024 A04300 MOV AL,[0043] :AL=33,为输入数字高位3的ASCII码0BDB:0027 3C38 CMP AL,38 0BDB:0029 7D12 JGE 003D :程序未跳转0BDB:002B 3C30 CMP AL,300BDB:002D 7417 JZ 0046 :程序未跳转0BDB:002F BA0E00 MOV DX,000E0BDB:0032 B409 MOV AH,090BDB:0034 CD21 INT 21 :显示为正0BDB:0036 EB01 JMP 0039 0BDB:0039 B44C MOV AH,4C0BDB:003B CD21 INT 21 :程序结束输入负数0BDB:0016 CD21 INT 21 :输入负数DD0BDB:0018 B402 MOV AH,020BDB:001A B20D MOV DL,0D0BDB:001C CD21 INT 210BDB:001E B402 MOV AH,020BDB:0020 B20A MOV DL,0A0BDB:0022 CD21 INT 210BDB:0024 A04300 MOV AL,[0043] :AL=64,为输入数字高位D的ASCII码0BDB:0027 3C38 CMP AL,38 0BDB:0029 7D12 JGE 003D :程序跳至003D0BDB:003D BA1F00 MOV DX,001F0BDB:0040 B409 MOV AH,090BDB:0042 CD21 INT 21 :显示为负0BDB:0044 EBF3 JMP 0039 :程序跳至00390BDB:0039 B44C MOV AH,4C0BDB:003B CD21 INT 21 :程序结束输入00BDB:0016 CD21 INT 21 :输入零000BDB:0018 B402 MOV AH,020BDB:001A B20D MOV DL,0D0BDB:001C CD21 INT 210BDB:001E B402 MOV AH,020BDB:0020 B20A MOV DL,0A0BDB:0022 CD21 INT 210BDB:0024 A04300 MOV AL,[0043] :AL=30,为输入数字高位0的ASCII码0BDB:0027 3C38 CMP AL,38 0BDB:0029 7D12 JGE 003D :程序未跳转0BDB:002B 3C30 CMP AL,300BDB:002D 7417 JZ 0046 :程序跳至00460BDB:0046 A04400 MOV AL,[0044]0BDB:0049 3C30 CMP AL,300BDB:004B 7409 JZ 0056 :程序跳至00560BDB:0056 BA3000 MOV DX,00300BDB:0059 B409 MOV AH,090BDB:005B CD21 INT 21 :显示为00BDB:005D EBDA JMP 0039 :程序跳至00390BDB:0039 B44C MOV AH,4C0BDB:003B CD21 INT 21 :程序结束注意:由于读取长度以字节为单位,所以输入零时需输入00而非0。六、实验思考题: 若输入的是非法字符而不是十六进制数,此程序会得到什么结果?如何改进? 答:此时根据输入字符的ASCII码,程序会得到其为正数或为负数的结果。 改进:须加入判断语句,实验分别判断输入字符的每一位是否为0—9及A—F,若不是,则跳出至ER段,显示错误,若是,则跳至R段,继续执行判断正负程序。改进后部分程序如下:(JUG段即为判定段,LOW段为判定低位是否为0。) 数据段定义中添加信息:MESS5DB‘THISDATAISWEONG!’,0DH,0AH,‘$’START段改为: START:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论