微机原理实验报告.docx

上传人:b****7 文档编号:10011040 上传时间:2023-02-07 格式:DOCX 页数:24 大小:36.02KB
下载 相关 举报
微机原理实验报告.docx_第1页
第1页 / 共24页
微机原理实验报告.docx_第2页
第2页 / 共24页
微机原理实验报告.docx_第3页
第3页 / 共24页
微机原理实验报告.docx_第4页
第4页 / 共24页
微机原理实验报告.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

微机原理实验报告.docx

《微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告.docx(24页珍藏版)》请在冰豆网上搜索。

微机原理实验报告.docx

微机原理实验报告

《微机原理与接口技术》

课程设计(学年论文)

说明书

课题名称:

代码转换程序设计(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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1