微机原理实验报告.docx
《微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
微机原理实验报告
《微机原理与接口技术》
课程设计(学年论文)
说明书
课题名称:
代码转换程序设计(A3-3)
学生学号:
0904160227
专业班级:
过程自动化02
学生姓名:
朱超
学生成绩:
指导教师:
陈裕国
课题工作时间:
2011-6-13至2011-6-18
武汉工程大学教务处制
填写说明:
1.一、二、三项由指导教师在课程设计(学年论文)开始前填写并交由学生保管;
2.四、五两项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;
3.成绩评定由指导教师按评定标准评分。
4.此表格填写好后与正文一同装订成册。
一、课程设计任务和基本要求:
(一)设计任务
使用汇编语言设计一个程序,实现大小写字母、二进制与十六进制、十六进制与十进制的转换。
1.有提示从键盘输入,在提示中最好给一个输入的例子;
2.输入错误或者输入其他字符,有提示输入错误的信息显示;
3.能够多次输入和显示结果。
4.实现从键盘输入-32768~+32767范围十进制正负数,转换成4位十六进制有符号补码显示出来。
(二)基本要求
1.有程序设计的分析、思路说明;
2.有程序流程框图;
3.程序代码及注释说明;
4.上机实验步骤;
5.程序运行结果的截屏图片。
指导教师签字:
教研室主任签字:
年月日年月日
二、进度安排:
周一上午:
明确课程设计任务和要求、设计原理。
周一下午~周三上午:
查看参考资料、完成理论设计(程序代码、原理图等)。
周三下午~周五:
上机、实验、调试,完成设计。
周六上午:
检查设计结果、提问、答辩。
周六下午:
撰写课程设计报告。
三、应收集资料及主要参考文献:
(一)应收集资料
1.有关DOS调用、ASCII码、BCD码、补码的知识;
2.大小写字母、二进制与十六进制、十六进制与十进制的转换方法;
3.8086宏汇编的相关定义、调用。
(二)主要参考文献
1.宋杰,汪志宏,江敏.微机原理与接口技术课程设计[M].北京:
机械工业出版社,2006
2.冯博琴.微型计算机计原理与接口技术[M].北京:
清华大学出版社,2007
3.王玉良.微机原理与接口技术[M].北京:
北京邮电大学出版社,2000
4.龚尚福.微机原理与接口技术[M].西安:
西安电子科技大学出版社,2008
5.刘锋.微机原理与接口技术[M].北京:
机械工业出版社,2009
四、课程设计摘要(中文):
本实验使用汇编语言设计一个程序,实现大小写字母、二进制与十六进制、十进制与十六进制的转换,要求有输入的例子及出错提示信息,实现从键盘输入-32768~+32767范围十进制正负数,转换成4位十六进制有符号补码显示出来。
由于本实验要实现的功能较多,如果放在一个程序一面编写比较直观,但会很复杂,不容易检查错误,所以用了模块法,用子程序实现各个功能,再通过调用连接起来。
本实验难点在于“实现从键盘输入-32768~+32767范围十进制正负数,转换成4位十六进制有符号补码显示出来”,这样涉及到把十进制转换成十六进制,判断正负,判断是否溢出,求负数补码等。
五、课程设计摘要(英文):
Thisexperimentusestheassemblylanguagedesignaprogram,andrealizethecaseletters,binaryandhex,decimalandhexconversion,Requirethatithastheinputexampleanderrormessage,realizedfromthekeyboardinput-32768~+32767ofdecimal,changeitintofourhexsignsshowcomplement.
Astheexperimenttoachievealotoffunction,ifwewriteitonthesideofaprogram,itwillbequiteintuitive,however,itwillalsobeverycomplex,andnoteasytocheckforerrors,sowechoosetouseamodularapproach,usingasubroutinetoachievevariousfunctions,intheendweconnectthosemodules
Thedifficultyoftheexperimentliesinthat"toinputadatafromarangeof-32768to+32767positiveandnegativedecimalnumberintoa4-digithexadecimalcodesignedupdisplay",thiswouldinvolvetoconverthextodecimaltodeterminethepositiveandnegativetodeterminewhetheranoverflow,andsocomplementofnegativenumber.
六、成绩评定:
指导教师评语:
指导教师签字:
200年月日
项目
评价
项目
评价
调查论证
工作量、工作态度
实践能力
分析、解决问题能力
质量
创新
得分
七、答辩记录:
答辩意见及答辩成绩
答辩小组教师(签字):
200年月日
总评成绩:
(教师评分×75%+答辩成绩×25%)
课程设计评审标准(指导教师用)
评价内容
具体要求
权重
调查论证
能独立查阅文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获得新知识的能力。
0.1
实践能力
能正确选择研究(实验)方法,独立进行研究工作。
如装置安装、调试、操作。
0.2
分析解决问题能力
能运用所学知识和技能去发现与解决实际问题;能正确处理实验数据;能对课题进行理论分析,得出有价值的结论。
0.2
工作量、工作态度
按期圆满完成规定的任务,工作量饱满,难度较大,工作努力,遵守纪律;工作作风严谨务实。
0.2
质量
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学;文字通顺,技术用语准确,符号统一,编号齐全,书写工整规范,图表完备、整洁、正确;论文结果有应用价值。
0.2
创新
工作中有创新意识;对前人工作有改进或独特见解。
0.1
代码转换程序设计说明书
1、方案论证
(1)大小写字母、二进制与十六进制、十六进制与十进制的转换方法
大小写字母转换方法:
小写字母的ASC码比大写字母的ASC码大20H,因此,大写转小写就是将大写字母的ASC码加20H,反之,将小写字母的ASC码减20H。
二进制与十六进制:
在数据段中定义一个长为16字节的空间用于存储输入的二进制数,每一位二进制数占一个字节,在输入二进制的时候,用一个指针DI指向定义的段DATA1,每输入一位二进制数,DI就加一。
当输入结束时,DI指向存储二进制最低位的位置。
再用另外一个指针SI指向段DATA1。
在取数时,将所取的数减30H,将它由ASC码变成真正的二进制。
首先二进制数最后一位取数,如果该数是1,就将DL加1。
DI减1,指向倒数第二位,如果倒数第二位是1,将DL加2。
DI减1,再取倒数第三位,如果取得的数是1,DL就加4。
DI减1,取倒数第四位,如果取得1,DL就加8。
这样就将二进制的第四位求和,DL再加30H,与39H比较,如果小于39H,就将DL入栈。
如果大于39H,再将DL加07H,然后将其入栈。
就这样向前取数,每四位像前面一样求和、入栈。
每次取数后,DI减1,比较SI和DI,如果两者相等,表示数已取完,直接进入入栈操作。
就这样每四位求和、转换、入栈,就将每四位作为一体转换为一位十六进制数。
由于低位先入栈,所以每出栈一位并显示,最后得到的十六进制也是从高到低的。
十六进制与十进制:
(1)输入一位十六进制数,将它由ASC码转换为二进制,将它赋给BX。
(2)再输入第二位十六进制数,转换为二进制后,将它赋给AX,BX向左移四位,执行语句“ADDBX,AX”。
(3)依次输入第三位十六进制数,转为二进制后将它赋给AX,重复第二步后面的操作。
(4)最后输入第四位十六进制数,重复第二步操作,最后得到的是这个四位十六进制数的求和。
(5)利用这个和除10000得到十进制数的万位,并显示万位。
余数在除以1000,得到千位并显示。
余数在除100,得到并显示百位。
余数除10,得到并显示十位。
最后的余数就是个位,显示个位。
这样一个四位十六进制数就转换为十进制数。
(2)宏汇编程序设计要点
要点包括:
1.汇编语言源程序格式——(段定义、数据变量定义、过程定义、汇编程序功能及汇编语言源程序上机过程)
2.基本汇编语言程序设计技法——(应用汇编语言实现的顺序程序设计、分支程序设计、循环程序设计)
2、程序设计
(1)总体设计
设计分析与思路说明
将转换操作都写成一个个模块,整个程序由若干个模块组成,zcx为主模块,调用模块1和模块6。
模块1又调用模块2、3、4和5四个模块,其中:
模块2实现小写字母向大写字母的转换
模块3实现大写字母向小写字母的转换
模块4实现二进制数向十六进制数的转换
模块5实现十进制向十六进制数的转换
模块6实现十六进制数向十进制数的转换
总体框图(框图中每一个模块的功能说明)
(2)程序设计
流程图:
程序代码及注释:
模块ZCX;;FILENAME:
CZX.ASM
;内容:
代码转换
EXTRNMAIN:
FAR,CHANGE5:
FAR
STACKSEGMENTPARAPUBLIC'STACK'
DB200DUP(0)
STACKENDS
DATASEGMENT
;*****主程序中的提示信息*****
STR1DB0AH,0DH,'********************************************$'
STR2DB0AH,0DH,'****$'
STR3DB0AH,0DH,'**WELCOMEYOU!
**$'
STR4DB0AH,0DH,'****$'
STR5DB0AH,0DH,'**THISISPROGRAMMEOFSHUZHIZHUANGHUAN**$'
STR6DB0AH,0DH,'****$'
STR7DB0AH,0DH,'**PRESSbTOBEGINEXCHANGE!
**$'
STR8DB0AH,0DH,'**PRESSqTOEXIT!
**$'
STR9DB0AH,0DH,'****$'
STR10DB0AH,0DH,'********************************************$'
STR11DB0AH,0DH,'INPUTERROR,PLEASEREPESS!
','$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
DISPMACROM;宏定义
LEADX,M
MOVAH,9
INT21H
ENDM
DISPSTR1;disp宏调用
DISPSTR3
DISPSTR4
DISPSTR5
DISPSTR6
DISPSTR7
DISPSTR8
DISPSTR9
DISPSTR10
LOP:
MOVAH,8
INT21H
CMPAL,'b';输入小写b则继续否则提示出错
JZLTOL
CMPAL,'q';输入小写q则退出
JZEXIT
DISPSTR11
JMPLOP
LTOL:
CALLMAIN
CALLCHANGE5
JMPstart
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
模块一;1.ASM调用其他程序的main程序
PUBLICINFO1,INFO2,BUFA,BUFB,BUF,MAIN,INFO0,INFO3
EXTRNCHANGE1:
FAR,CHANGE2:
FAR,CHANGE3:
FAR,CHANGE4:
FAR
DATASEGMENT
INFO0DB0AH,0DH,'THISISTHECHANGEOFLETTERTOLETER:
$'
INFO1DB0AH,0DH,'PLEASEINPUTANUMBER:
$'
INFO2DB0AH,0DH,'OUTPUTSTRING:
$'
BUFADB81
DB?
DB80DUP(?
)
BUFBDB80DUP(?
)
INFO3DB0AH,0DH,'THISISTHECHANGEOFDIGITALTODIGITAL:
',0AH,0DH,'$'
BUFDB0DH,0AH,'THENUMBERIS:
0100101010001111B',0AH,0DH,'THERESULTIS:
$'
;INFO4DB0AH,0DH,'THISISTHECHANGEFROMDECIMALTOHEXNNUMBER:
$'
;INFO5DB0AH,0DH,'FOREXAMPLE255DWILLBECHANGEDINTOFFH:
$'
;INFO6DB0AH,0DH,'PLEASEINPUTANUMBER:
$'
;INFO7DB0AH,0DH,'INPUTERROR!
:
$'
DATAENDS
STACKSEGMENTSTACK
DB200DUP(?
)
STACKENDS
CODESEGMENT
MAINPROCFAR
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
MOVAX,DATA
MOVDS,AX
DISPMACROM
LEADX,M
MOVAH,9
INT21H
ENDM
CALLCHANGE1;调用,小写转大写
CALLCHANGE2;调用大写转小写
DISPINFO3
DISPBUF
CALLCHANGE3;调用显示4a8f的子程序
CALLCHANGE4;调用把十进制转换成十六进制的子程序
RET
MAINENDP
CODEENDS
END
模块二:
;2.ASM;小写转大写程序
EXTRNINFO1:
BYTE,INFO2:
BYTE,BUFA:
BYTE,BUFB:
BYTE,INFO0:
BYTE
PUBLICCHANGE1
CODESEGMENT
ASSUMECS:
CODE
LOWTOHIGHPROCNEAR;定义子程序,段内调用near
CMPAL,'a';判断,在a-z之间则转换成相应大写
JBSTOP
CMPAL,'z'
JASTOP
SUBAL,20H
STOP:
RET
LOWTOHIGHENDP
CHANGE1PROCFAR
LEADX,INFO0;提示输入
MOVAH,9
INT21H
LEADX,INFO1
MOVAH,9
INT21H
LEADX,BUFA
MOVAH,10
INT21H
LEASI,BUFA+1;指针指向实际输入个数单元
LEADI,BUFB
MOVCH,0
MOVCL,[SI]
ADDSI,1
NEXT:
MOVAL,[SI]
CALLLOWTOHIGH
MOV[DI],AL
INCSI
INCDI
LOOPNEXT;循环,依次把小写字母转换成大写字母
MOVBYTEPTR[DI],'$'
LEADX,INFO2
MOVAH,9
INT21H
LEADX,BUFB;显示转换后的字符串
MOVAH,9
INT21H
RET
CHANGE1ENDP
CODEENDS
END
模块三:
;3.ASM;与2模块相似
EXTRNINFO1:
BYTE,INFO2:
BYTE,BUFA:
BYTE,BUFB:
BYTE
PUBLICCHANGE2
CODESEGMENT
ASSUMECS:
CODE
HIGHTOLOWPROCNEAR
CMPAL,'A'
JBSTOP
CMPAL,'Z'
JASTOP
ADDAL,20H
STOP:
RET
HIGHTOLOWENDP
CHANGE2PROCFAR
LEADX,INFO1
MOVAH,9
INT21H
LEADX,BUFA
MOVAH,10
INT21H
LEASI,BUFA+1
LEADI,BUFB
MOVCH,0
MOVCL,[SI]
INCSI
NEXT:
MOVAL,[SI]
CALLHIGHTOLOW
MOV[DI],AL
INCSI
INCDI
LOOPNEXT
MOVBYTEPTR[DI],'$'
LEADX,INFO2
MOVAH,9
INT21H
LEADX,BUFB
MOVAH,9
INT21H
RET
CHANGE2ENDP
CODEENDS
END
模块四:
;4.ASM本模块仅显示固定的一个四位十六进制数
EXTRNBUF:
BYTE,INFO3:
BYTE
PUBLICCHANGE3
CODESEGMENT
CHANGE3PROCFAR
ASSUMECS:
CODE
SUBAX,AX
MOVCH,4
MOVCL,4
MOVBX,4A8FH
ROTATE:
ROLBX,CL
MOVAL,BL
ANDAL,0FH
ADDAL,30H
CMPAL,3AH
JLPRINTIT
ADDAL,7H
PRINTIT:
MOVDL,AL
MOVAH,2
INT21H
DECCH
JNZROTATE;四次循环把十六进制数依次变成ASCLL码
MOVDL,'H'
MOVAH,2
INT21H
RET
CHANGE3ENDP
CODEENDS
END
模块五:
;5.ASM
;EXTRNINFO4:
BYTE,INFO5:
BYTE,INFO6:
BYTE,INFO7:
BYTE
PUBLICCHANGE4
DATASEGMENT
BUF1DB0AH,0DH,'PLEASEINPUTNumber,Forexample:
255:
$';提示部分
BUF2DB0AH,0DH,'INPUTERROR!
:
$'
BUF3DB0AH,0DH,'Theresuleis:
$'
DATAENDS
CODESEGMENT
CHANGE4PROCFAR
ASSUMECS:
CODE,DS:
DATA
CALLDEC2BIN
CALLCRLF;调用子程序,把十进制转换成二进制
CALLBIN2HEX;二进制转换成十六进制程序
CALLCRLF;回车换行程序
RET
DEC2BINPROCNEAR
MOVAX,DATA
MOVDS,AX
LEADX,BUF1;提示输入
MOVAH,9
INT21H
LEADX,BUF3;输出结果显示
MOVAH,9
INT21H
XORBX,BX
NEWCHAR:
MOVAH,1
INT21H
SUBAL,30H;输入的数字的ASCLL码与30h比较,在0-9内则继续
JLEXIT
CMPAL,9
JGEXIT
CBW
XCHGAX,BX;把AX里面数值放到BX里面
MOVCX,10;数值高位乘以10
MULCX
XCHGAX,BX
ADDBX,AX;高位加地位,再放在BX中
JMPNEWCHAR;依次循环把十进制转换成二进制
EXIT:
RET
DEC2BINENDP;
BIN2HEXPROCNEAR
MOVCH,4;设置数据的位数
ROTATE:
MOVCL,4;设置移位次数
ROLBX,CL;把第四位送到高四位
MOVAL,BL
ANDAL,0FH;屏蔽高四位,结果是把BX最高的四位转换成十六进制数
ADDAL,30H
CMPAL,3AH
JLPRINTIT;是0---9
ADDAL,07H;是A_F
PRINTIT:
MOVDL,AL
MOVAH,2
INT21H
DECCH
JNEROTATE
RET
BIN2HEXENDP
CRLFPROCNEAR
MOVDL,0DH;回车
MOVAH,2
INT21H
MOVDL,0AH;换行
MOVAH,2
INT21H
RET
CRLFENDP
CHANGE4ENDP
CODEENDS
END
模块六:
;6.ASM把十六进制数转换成十进制数
PUBLICCHANGE5
DATASEGMENT