微机原理-代码转换程序
- 格式:doc
- 大小:359.00 KB
- 文档页数:29
微机原理及接口技术上机实习题目代码转换程序设计学院自动化学院专业班级姓名指导教师李道远年月日上机实习任务书学生姓名:专业班级:指导教师:李道远工作单位:自动化学院题目: 代码转换程序设计初始条件:完成一个字母或数制之间的转化程序,主程序分别具有3 种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“Q”键退出。
1)实现二进制数向十六进制数的转换2)实现十六进制数向二进制数的转换3)实现十六进制数向十进制数的转换要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图摘要 (1)1原理分析 (4)2程序设计流程 (2)2.1程序流程图 (2)2.2设计思路 (3)3程序设计 (3)4运行结果 (4)5心得体会 (8)参考文献 (9)附录 (10)计算机处理的信息是往往是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。
但在计算机内部采用的是二进制计数制,这种进制表达方法对于人们研究分析不是很直观。
本次课程设计将通过所学的微机原理知识理论,用汇编语言编写程序,程序设计成一个数据转换系统,给出一个可供选择的菜单,根据界面的信息选择不同的子功能,实现二进制、十进制与十六进制数据之间的相互转换。
通过这种转换中数据的流向能够更好的理解计算机的一些基本原理,如计算机数据的存储形式和一些基本的DOS功能调用的基本方法与注意事项。
关键词:二进制,十进制,十六进制,数据1 原理分析进位计数制是人们利用符号来计数的方法。
一种进位计数制包含一组数码符号和两个基本因素。
微机原理-数码转换实验报告-CAL-FENGHAI.-(YICAI)-Company One1实验九数码转换一、实验目的1、掌握计算机常用数据编码之间的相互转换方法。
2、进一步熟悉DEBUG软件的使用方法。
二、实验内容1、ACSII码转换为非压缩型BCD码2、BCD码转换为二进制码3、十六进制数转换为ASCII码三、实验1、ACSII码转换为非压缩型BCD码DATA SEGMENT PARA 'DATA'DATA1 DB 8 DUP()DATA2 DB 8 DUP()DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,SEG DATA1MOV DS,AXMOV DX,DATAMOV AH,0AHINT 21HLEA SI,DATA1MOV CL,[SI+1]LEA DI,DATA2ADD SI, 2CHK: MOV AL,[SI+2]CMP AL, '0'JB L01CMP AL, '9'JA L01SUB AL,30HMOV BL,ALMOV [DI], BLINC SIINC DIDEC CXJNZ CHKL01: MOV BL, 0FFHLOOP CHKMOV AH,4CH INT 21H CODE ENDSEND START2、BCD码转换为二进制码DATA SEGMENTBCD DB 1,2,3,4,5A DWDATA ENDSSTACK SEGMENT PARA STACK''STACK''STAPN DW 50 DUP()STACK ENDSCODE SEGMENTMAIN PROC FARASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXCALL CONVERTMOV A,BXRETMAIN ENDPCONVERT PROC NEARPUSH SIPUSH CXPUSH AXMOV SI,4L1:MOV AL,BCD[SI]CBWXCHG AX, BXMOV CX,10DMUL CXXCHG AX,BXADD BX,AXDEC SIJNZ L1POP AXPOP CXPOP SIEXIT:MOV AH,4CH INT 21H CONVERT ENDP CODE ENDSEND START3、十六进制数转换为ASCII码DATA SEGMENTDATA1 DW 2010HDATA2 DB 4 DUP()DATA ENDSSTACKS SEGMENT PARA STACK 'STACK'STACKS ENDSCODES SEGMENTASSUME SS:STACKS,CS:CODESASSUME DS:DATASSTART: MOV AX, DATAMOV DS, AXLEA SI, DATA1MOV AX, [SI]MOV CL, 12SHR AX, CLMOV BL, ALCALL ASCMOV DATA2, BLCALL XSMOV AX, [SI]MOV CL, 8SHR AX, CLAND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+1, BLCALL XSMOV AX, [SI]MOV CL, 4SHR AX, CLAND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+2, BLCALL XSMOV AX, [SI]AND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+3, BLCALL XSMOV AH, 4CHINT 21HASC PROCCMP BL, 0AH JC LPADD BL, 07H LP: ADD BL, 30H RETASC ENDPXS PROCMOV DL, BL MOV AH, 02H INT 21HRETXS ENDPCODE ENDSEND START4、六进制数转换为十进制DATAS SEGMENTSTRING1 DB 0DH,0AH,'$'STRING2 DB 0DH,0AH,'$'DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV DX,OFFSET STRING1MOV AH,9INT 21HMOV CL,10HMOV BX,0NEWCHAR:MOV AH,1INT 21HSUB AL,30HJB DISPCBWXCHG AX,BXMOV CH,0MUL CXXCHG AX,BXADD BX,AXJNC NEWCHARDISP:MOV DX,OFFSET STRING2MOV AH,9INT 21HMOV CX,10000AGAIN:MOV DX,0MOV AX,BXDIV CXMOV BX,DXMOV DL,ALADD DL,30HCMP DL,39HJLE NEXTADD DL,7H NEXT:MOV AH,2INT 21HMOV DX,0MOV AX,CXMOV CX,10DIV CXMOV CX,AXCMP CX,0JNZ AGAINMOV AH,4CH INT 21H CODES ENDS END START5、十进制转换成七段码DATA SEGMENTDATA1 DB 3,4TABLE DB 23H,56H,42H,75H,00H,24H,67H,39H,20H DATA2 DB 2 DUP()DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA ST: MOV DI, OFFSET BUFDAMOV CL, 80HMOV BX, OFFSET TABLE DISI: MOV BL, [DI+0]MOV AX, BXXLATMOV DX, PORTSEGOUT DX, ALMOV AL, CLMOV DX, PORTBITOUT DX, ALPUSH CXMOV CX, 30HDELAY: LOOP DELAYPOP CXCMP CL, 20HJZ QUITINC DISHR CL, 1JMP DISIQUITCODE ENDSEND ST。
课程设计任务书学生姓名:专业班级:自动化指导教师:工作单位:自动化学院题目: 代码转换程序初始条件:字母或数制之间的转化程序,按S后,键盘输入小写字母,显示对应的大写字母,按B后,键盘输入二进制数,显示对应的十六进制数。
结果显示在屏幕上。
按Q退出程序。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月18日~1月20日:收集资料,方案选择1月21日~1月23日:整体流程,程序细节1月25日~1月27日;调试程序,报告撰写1月28:交设计报告,程序演示,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录1设计任务要求 (1)1.1实现任务 (1)1.2任务分析 (1)2方案比较 (2)3系统实现原理 (3)3.1系统资源 (3)3.2DOS功能调用 (3)4.软件设计与实现 (5)4.1程序设计思想 (5)4.1.1程序功能描述 (5)4.1.2流程图 (5)4.2算法分析 (9)4.2.1小写字母转大写字母算法 (9)4.2.2二进制转换为十六进制算法 (9)4.2.3DOS中的字符显示功能 (10)5软件建立与调试 (11)5.1汇编源程序的建立 (11)5.2程序调试与运行结果 (12)6心得体会 (14)参考文献 (15)附录一源程序及其注释 (16)附录二程序运行效果图 (23)附录三本科生课程设计成绩评定表 (24)摘要本文通过汇编语言设计实现简单的代码转换功能,把输入的小写字母转换为大写字母和输入的二进制转换为十六进制,并显示转换结果。
微机原理实验报告姓名:班级:学号:时间:实验名称:基本汇编语言程序设计实验一:两个32位无符号数乘法程序实验二:码制转换程序设计<1>十六进制到ASCII<2>从二进制到ASCII一、程序流程图1、两个32位无符号数乘法程序:2、十六进制到ASCII二、程序的实现:1、实验一程序:NAME 32 BIT MULTIPLYDATA SEGMENTMULNUM DW 0000,0FFFFH,0000,0FFFFH,4 DUP(?) DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START PROC FARBEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXLEA BX,MULNUMMULU32: MOV AX,[BX]MOV SI,[BX+4]MOV DI,[BX+6]MUL SIMOV [BX+8],AXMOV [BX+0AH],DXMOV AX,[BX+2]MUL SIADD AX,[BX+0AH]ADC DX,0MOV [BX+0AH],AXMOV [BX+0CH],DXMOV AX,[BX]MUL DIADD AX,[BX+0AH]ADC DX,[BX+0CH]MOV [BX+0AH],AXMOV [BX+0CH],DXPUSHFMOV AX,[BX+2]MUL DIPOPFADC AX,[BX+2]ADC DX,0MOV [BX+0CH],AXMOV [BX+0EH],DXRETSTART ENDPCODE ENDSEND START2、实验二的程序:1)NAME HEX_CHANGE_TO_ASCIIDATA SEGMENTL1 DW 2STRING DB 34H,98HL2 DW?BUFFER DB 2*2 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK 'STACK' DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START PROC FARBEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,L1LEA BX,STRINGLEA SI,BUFFERMOV L2,CXMOV CX,AXAGAIN: MOV AL,[BX]MOV DL,ALAND AL,0FHCALL CHANGEMOV AL,DLPUSH CXMOV CL,4SHR AL,CLPOP CXCALL CHANGEINC BXRETSTART ENDPCHANGE PROCCMP AL,10JL ADD_0ADD AL,'A'-'0'-10ADD_0: ADD AL,'0'MOV [SI],ALINC SIRETCHANGE ENDPCODE ENDSEND START2)NAME BINARY_TO_ACSIIDATA SEGMENTNUM DW 4F78HSTRING DB 16 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART PROC FARBEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXLEA DI,STRINGMOV CX,LENGTH STRINGPUSH DIPUSH CXMOV AL,30H;REP STOWPOP CXPOP DIMOV AL,31HMOV BX,NUMAGAIN: RCL BX,1JNC NEXTMOV [DI],ALNEXT: INC DILOOP AGAINRETSTART ENDPCODE ENDSEND START三、实验感想:在实验的过程中,照着书上慢慢的去了解那些代码的含义,并且将代码出现的error改错,后来回到寝室发现在学校的电脑没有了error 的程序而在自己的电脑运行时出现error,后来又将程序修改发现了最后部分的begin改为start就能运行。
《微机原理及接口》课程设计报告课题名称代码转换程序学院自动控制与机械工程学院专业班级姓名学号时间2011/12/31-2012/1/13目录微机原理课程设计任务书……………………………………代码转换程序课程设计报告…………………………………一.概述…………………………………………………………二.设计任务及预期目标和要求………………………………1.设计任务…………………………………………………….2.设计目的和要求…………………………………………….三.设计思想分析……………………………………………...四.程序设计……………………………………………………1.程序设计流程图…………………………………………….2.源程序代码………………………………………………….五.运行结果……………………………………………………六.课程设计总结报告………………………………………...1.课程设计中遇到的主要问题和解决方法………………….2.创新和得以之处…………………………………………….3.课程设计中的感想和心得体会…………………………….微机原理课程设计任务书一.课题题目:代码转换程序二.课题要求:在DOS环境中编程完成以下任务:完成一个字母或数制之间的转换程序,主程序分别具有5种可选择的子功能,按菜单提示,选择相应的字符分别进入相应的子功能,并按屏幕提示完成相应得输入,并显示结果.按“q”健退出。
可选择的子功能分别为:●实现小写字母向大写字母的转换●实现大写字母向小写字母的转换●实现二进制数向十六进制数的转换●实现十六进制数向二进制数的转换●实现十六进制数向十进制数的转换1.参考设计基本思路编程实现上述功能;2.设计说明书;包括设计思想,程序流程图和源程序三.设计基本思路:见课程设计指导书四.时间进度表五.考核方式六.补充说明1.设计题目必须调试成功,(生成的可执行文件必须运行并且能够实现题目实现的功能),考核时独立完成考核内容,若未完成没有成绩。
信息工程学院课程设计报告设计题目:______代码转换程序设计______名称: 微机原理与接口课程设计班级:_______通信工程1002班______姓名:_______卓自强_王可______学号: ____2010013544 2010013524__设计时间: 至指导教师:__________卢清平____________评语:评阅成绩: 评阅教师:一、程设计的性质和目的通过课程设计,进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关软件程序设计的基本知识和基本方法,硬件电路的设计等,通过实际动手能力的培养,进一步熟悉汇编语的结构和使用方法,掌握软硬结合的控制程序设计,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平,增进对汇编语言的认识,加强用汇编语言编程的能力;掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。
了解和掌握汇编语言程序设计过程、方法及实现,为以后相关的课程的学习打下良好基础。
二、课程设计要求1、遵循模块化、结构化的程序设计方法。
2、要求程序必须正确。
3、程序简明易懂,多运用输入输出提示,有出错信息及必要的注释。
4、要求程序结构合理,语句使用得当。
5、适当追求编程技巧和程序运行效率。
三、主要仪器设备及软件Pc机,MASM汇编软件,绘图软件,等四、课程设计题目及要求题目:代码转换程序要求:完成一个字母或数制之间的转化程序,主程序分别具有5种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“q”键退出。
5种可选择的子功能分别为:1)实现小写字母向大写字母的转换2)实现大写字母向小写字母的转换3)实现二进制数向十六进制数的转换4)实现十六进制数向二进制数的转换5)实现十六进制数向十进制数的转换五、课题分析及设计思路1、实现大小写字母之间的转换:输入的字符串中,不是字母的字符不改变;大写字母改成小写字母时,若是大写字母则不改变;同样,小写字母改成大写字母时,若是小写字母则不改变2、二进制和十六进制数之间的转换:输入一个二进制数(或十六进制数),用十六进制数(或二进制数)表示输出;最多能把十六位二进制数(或四位十六进制数)用四位十六进制数(或十六位二进制数)表示输出;小于十六位(或四位)时按“q”结束并输出3、十进制数和十六进制数之间的转换:输入一个十六进制数,用十进制数表示输出;最大能把十六进制数FFFF转换成十进制数65535表示输出;小于FFFF时按“q”结束并输出整个程序由四个主要的子程序和若干个辅助子程序组成,实现六个转换功能:HEXIDEC用来把一个十六进制数转换成十进制数表示BINARY用来把十六制数转换为十六位二进制数表示BETOHE用来把一个十六位二进制数转换成十六进制输出1、INPUT用来输入字符串2、HEXIBIN用来输入一个十六进制数,并存放在BX中3、BINIDEC用来把BX中十六进制转换到十进制4、DEC_DIV用来除以各位十进制的权5、PRINT用来把BX中的十六进制数转换成二进制8、INBIN输入十六二进制数9、CRLF用来换行六、程序主要流程等于1调用BTOS 等于2调用STOB等于3调用HTOB等于4调用BTOH等于5调用HTOD调用INPUT 宏展开GAIXIE七、程序及主要代码与分析7.1程序及主要代码GAIXIE MACRO P1,P2,P3,P4,P5,P6 ;义该宏用来判定字母? P2: CMP BYTE PTR [SI],P3JB P5CMP BYTE PTR [SI],P4JNB P5CMP BYTE PTR [SI],'$' ;到$则结束JZ P6P1 BYTE PTR [SI],20HP5: INC SILOOP P2P6: LEA DX,BUF1+2 ;出改写后的字母MOV AH,9 ;调用9号中断功能,输出字符串INT 21HLEA DX,BF ;把BF首地址给CXMOV AH,9 ;调用9号中断功能INT 21HJMP START ;返回ENDMDA TA SEGMENT ;义数据段BUF DB '**********choose the operation**********',0DH,0AH DB '1:big to small',0DH,0AHDB '2:small to big',0DH,0AHDB '3:hexadecimal to binary',0DH,0AHDB '4:binary to hexadecimal',0DH,0AHDB '5:hexadecimal to decimal',0DH,0AHDB '6/q:EXIT',0DH,0AH,'$'BF DB 0DH,0AH,'$'BUF1 DB 21,?,20 DUP(?) ;用来存放输入的字符串BUF2 DB 'enter a hex data:$'BUF3 DB 'The input is wrong,choose again please:$'BUF4 DB 'enter a deci data:$'BUF5 DB 'enter a bin data:$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUF ;出选择界面MOV AH,9 ;调用9号中断功能INT 21HMOV AH,1 ;入要选择的操作INT 21HPUSH AX ;NT 会改变AL的值,应压栈保护LEA DX,BF ;行MOV AH,9 ;调用9号中断功能INT 21HPOP AX ;把AX压栈保护CMP AL,'1' ;把AL中内容跟1比较JZ BTOS ;相等则跳转到CMP AL,'2'JZ STOBCMP AL,'3'JZ HTOBCMP AL,'4'JZ BTOHCMP AL,'5'JZ HTODCMP AL,'6'JZ EXITCMP AL,71HJZ EXITLEA DX,BUF3 ;把BUF3的首地址给DXMOV AH,9INT 21HCALL CRLF ;调用子程序CALLJMP START ;返回,重新选择EXIT:MOV AH,4CH ;退出INT 21HBTOH:CALL BETOHE ;调用二进制转十六进制子程序HTOB:CALL BINARY ;调用十六进制转二进制子程序HTOD:CALL HEXIDEC ;调用十六进制转十进制子程序BTOS:CALL INPUT ;大写字母改为小写MOV CX,20 ;作为循环条件GAIXIE ADD,NEXT1,'A','Z',N1,N2 ;宏GAIXIE展开STOB:CALL INPUT ;小写字母改为大写MOV CX,20GAIXIE SUB,NEXT2,'a','z',N3,N4INPUT PROC NEAR ;输入字符串MOV DX,0 ;DX清零MOV DX,OFFSET BUF1 ;把BUF1的首地址给DXMOV AH,10 ;调用10号中断功能,输出字符串INT 21HLEA DX,BF ;把BF首地址给DXMOV AH,9INT 21HLEA SI,BUF1+2MOV BL,[SI-1] ;把输入的字符个数给BLMOV BH,0 ;BH清零MOV BYTE PTR [BX+SI+1],'$' ;把$作为字符串结束字符LEA DX,BUF1+2MOV AH,9INT 21HRET ;返回INPUT ENDPHEXIDEC PROC NEAR ;用该子程序把一个十六进制数转换成十进制数表示PUSH DS ;保护初始数据段SUB AX,AX ;AX清零PUSH AX ;把AX压栈保护START1: LEA DX,BUF2MOV AH,9INT 21HCALL HEXIBIN ;调用输入一个十六进制数子程序CMP AL,71H ;遇q则退出JZ EXIT1CALL CRLF ;换行CALL BINIDECCALL CRLFJMP START1 ;返回EXIT1:RETHEXIDEC ENDPHEXIBIN PROC NEAR ;输入一个十六进制数,并存放在BX中MOV BX,0 ;把BX清零MOV DX,0 ;作为输入四位的记数器INHEX:CMP DX,4 ;把DX跟4比较JNB HEXEND ;大于则跳转MOV AH,1 ;输入数据INT 21HCMP AL,71H ;遇到q则退出JZ HEXENDSUB AL,30H ;判断是否数字或字母?否则跳出JL HEXENDCMP AL,10 ;判断是否数字JL ADD_TO ;是则存放BX中SUB AL,7 ;把AL内容减7转为字母CMP AL,10 ;判断是否小写字母(a~f)JL HEXENDCMP AL,16JL ADD_TO ;小于则跳转SUB AL,20H ;判断是否大写字母(A~F)CMP AL,10JL HEXENDCMP AL,16JGE HEXENDADD_TO:MOV CL,4 ;作为循环条件SHL BX,CL ;BX乘以16MOV AH,0ADD BX,AX ;两数相加INC DX ;DX加1JMP INHEXHEXEND:RETHEXIBIN ENDPBINIDEC PROC NEAR ;用来把BX中十六进制转换到十进制MOV CX,10000 ;把10000给CX,作为万位的权CALL DEC_DIV ;调用除权子程序MOV CX,1000CALL DEC_DIVMOV CX,100CALL DEC_DIVMOV CX,10CALL DEC_DIVMOV CX,1CALL DEC_DIVRETBINIDEC ENDPDEC_DIV PROC NEAR ;除以各位十进制的权MOV AX,BX ;把BX内容给AXMOV DX,0 ;DX清零DIV CXMOV BX,DXMOV DL,ALADD DL,30H ;转换为ASSIIMOV AH,2INT 21HRETDEC_DIV ENDPCRLF PROC NEAR ;换行LEA DX,BFMOV AH,9INT 21HRETCRLF ENDPBINARY PROC NEAR ;该子程序用来把十六制数转换为十六位二进制数表示START2:LEA DX,BUF2MOV AH,9INT 21HPUSH DS ;把DS压栈SUB AX,AX ;AX清零PUSH AXCALL HEXIBINCMP AL,71HJZ EXIT2CALL CRLFCALL PRINTCALL CRLFJMP START2EXIT2:RETBINARY ENDPPRINT PROC NEAR ;把BX中的十六进制数转换成二进制MOV CX,16D ;记数ROT: SHL BX,1D ;每移一位最高位变为CFJC SET ;CF为1则跳到SET,否则输出0MOV DL,30HMOV AH,2INT 21HDEC CXJNZ ROTRETSET:MOV DL,31H ;输出1MOV AH,2INT 21HDEC CXJNZ ROTRETPRINT ENDPDECIBIN PROC NEAR ;输入一个五位的十进制数MOV BX,0MOV CX,0NEWCHAR:CMP CX,5JNB EXIT4MOV AH,1INT 21HCMP AL,71HJZ EXIT4SUB AL,30HJL EXIT4CMP AL,9JG EXIT4CBWINC CXXCHG AX,BXMOV DX,10MUL DXXCHG AX,BXADD BX,AXJMP NEWCHAREXIT4:RETDECIBIN ENDPBINIHEX PROC NEAR ;把BX中的十进制数转换成十六进制输出MOV CH,4ROTA TE:MOV CL,4ROL BX,CL ;把BX中高四位移到低四位,放到AL中MOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AH ;判断是否为数字JL PRINTITADD AL,7PRINTIT:MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTA TERETBINIHEX ENDPBETOHE PROC NEAR ;用该子程序来把一个十六位二进制数转换成十六进制数START3:LEA DX,BUF5MOV AH,9INT 21HPUSH DSSUB AX,AXPUSH AXCALL INBINCMP AL,71HJZ EXIT5CALL CRLFCALL BINIHEXCALL CRLFJMP START3EXIT5:RETBETOHE ENDPINBIN PROC NEAR ;输入十六二进制数MOV BX,0MOV CX,0PUTIN:CMP CX,16JNB EXIT6MOV AH,1INT 21HCMP AL,1BHJZ EXIT6SUB AL,30HJL EXIT6CMP AL,1JG EXIT6CBWINC CXXCHG AX,BXMOV DX,2MUL DXXCHG AX,BXADD BX,AXJMP PUTINEXIT6:RETINBIN ENDPCODE ENDSEND START7.2算法分析小写字母的ASCII码比大写字母的ASC码大20H,因此,大写字母转换成小写字母就是将大写字母的ASCII码加20H,反之,小写字母转换成大写字母就是将小写字母的ASCII码减20H。
微机原理码制转换的原理码制转换是指将一种编码格式转换成另一种编码格式的过程。
在微机原理中,常见的码制包括二进制码、十进制码、十六进制码和BCD码等。
每种码制都有其特定的应用场景和计算方法。
以下将详细介绍微机原理中码制转换的原理。
1. 二进制码转十进制码:二进制码是由0和1两个数字组成的代码,而十进制码是由0~9这10个数字组成的代码。
二进制码转换为十进制码的方法是根据权值计算每一位的值,并将所有位的值相加。
例如,将二进制码101001转为十进制码的计算方法是:(1 ×2^5) + (0 ×2^4) + (1 ×2^3) + (0 ×2^2) + (0 ×2^1) + (1 ×2^0) = 412. 十进制码转二进制码:十进制码是我们平时最常用的码制,转换为二进制码的方法是使用除2取余法。
具体步骤如下:将十进制数除以2,记录余数,直到商为0为止,然后将所有的余数倒序排列即为二进制码。
例如,将十进制数37转换为二进制码的方法是:37 ÷2 = 商18,余118 ÷2 = 商9,余09 ÷2 = 商4,余14 ÷2 = 商2,余02 ÷2 = 商1,余01 ÷2 = 商0,余1倒序排列所有的余数:1001013. 十进制码转十六进制码:十进制码转十六进制码的方法是使用除16取余法。
具体步骤如下:将十进制数除以16,记录余数,直到商为0为止,然后将所有的余数倒序排列即为十六进制码。
注意,余数大于9时使用A、B、C、D、E、F等字母表示。
例如,将十进制数175转换为十六进制码的方法是:175 ÷16 = 商10,余15(F)10 ÷16 = 商0,余10(A)倒序排列所有的余数:AF因此,十进制数175转换为十六进制码为AF。
4. 十六进制码转十进制码:十六进制码转十进制码的方法是根据权值计算每一位的值,并将所有位的值相加。
课程设计题目代码转换程序设计学院自动化学院专业电气工程及其自动化班级姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:自动化学院题目:代码转换程序设计要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.用汇编语言编写一个字母和数制之间的转换程序,设计出友好的交互界面;2.实现小写字母和大写字母之间的相互转换;实现十进制数和二进制数以及十六进制数和二进制数之间相互转换;实现十进制数和八进制数以及二进制数和八进制数之间相互转换;实现十进制数和十六进制数以及八进制数和十六进制数之间相互转换;3.撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:12月28日---12月28日查阅资料及方案设计12月29日---1月2日编程1月3日-----1月7日调试程序1月8日-----1月9日撰写课程设计报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (2)1 代码转换程序设计 (2)1.1 系统总体分析 (2)1.2 系统总体流程图及其说明 (2)2 详细设置 (4)2.1 主模块及子模块说明 (4)2.2 各模块详细设计及流程图 (5)2.2.1 主模块 (5)2.2.2 十进制数转换为二进制数 (6)2.2.3 二进制数转换为十进制数 (8)2.2.4 二进制数转换为十六进制数 (11)2.2.5 十六进制数转换为二进制数 (13)3 程序调试 (177)3.1 运行界面分析 (17)3.2 算法的分析 (18)3.3 调试过程及分析 (19)4 心得体会................................................................................................... 错误!未定义书签。
北华航天工业学院课程设计报告(论文)设计课题:代码转换大小写字母转换专业班级:电子信息工程学生姓名:指导教师:设计时间: 2010-12-16北华航天工业学院电子工程系微机原理课程设计任务书指导教师:教研室主任:年月日内容摘要在课程设计之前,具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法是必不可少的。
因此原理部分重新温习并整理了相关知识。
课程设计要求进行大小写字母的转换。
其实字母大小写的区别在于他们的ASCII码范围,它们之间的转换其实就是加减相应的ASCII码值。
在判断输入的字母是大写的还是小写的(即判断输入符号ASCII码在41H~5AH还是在61H~7AH内)之后,决定判断是加上还是减去ASCII码值。
关键词:汇编代码转换大小写目录一、概述 (1)二、方案设计与论证 (1)1.汇编语言基础 (1)2.方案设计 (2)三、程序设计 (3)1.程序设计流程图 (3)2.程序代码 (4)四、运行结果 (5)五、心得体会 (6)六、参考文献 (6)一、概述:在计算机系统中有多种数制和编码,常用的数制有二进制、八进制以及十六进制,常用的代码有BCD码、ASCll码和七段显示码等。
这些数制和编码根据其作用的不同,在存储形式上也有差异。
在实际应用中,它们也因使用的要求不同而有所差异。
在配备操作系统管理程序的计算机中,有些代码转换程序已在系统管理软件中编好。
还有些代码转换需要根据使用要求通过编程完成。
因此,代码转换是非数据处理中最常见的情况。
二、方案设计:1、汇编语言基础汇编:计算机不能直接识别和执行汇编语言程序,而要通过“翻译”把源程序译成机器语言程序(目标程序)才能执行,这一“翻译”工作称为汇编。
汇编有人工汇编和计算机汇编两种方法。
汇编语言是面向机器的,每一类计算机分别有自己的汇编语言。
汇编语言占用的内存单元少,执行效率高,广泛应用于工业过程控制与检测等场合。
课程设计任务书学生姓名:专业班级:自动化指导教师:工作单位:自动化学院题目: 代码转换程序初始条件:字母或数制之间的转化程序,按S后,键盘输入小写字母,显示对应的大写字母,按B后,键盘输入二进制数,显示对应的十六进制数。
结果显示在屏幕上。
按Q退出程序。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月18日~1月20日:收集资料,方案选择1月21日~1月23日:整体流程,程序细节1月25日~1月27日;调试程序,报告撰写1月28:交设计报告,程序演示,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录1设计任务要求 (1)1.1实现任务 (1)1.2任务分析 (1)2方案比较 (2)3系统实现原理 (3)3.1系统资源 (3)3.2DOS功能调用 (3)4.软件设计与实现 (5)4.1程序设计思想 (5)4.1.1程序功能描述 (5)4.1.2流程图 (5)4.2算法分析 (9)4.2.1小写字母转大写字母算法 (9)4.2.2二进制转换为十六进制算法 (9)4.2.3DOS中的字符显示功能 (10)5软件建立与调试 (11)5.1汇编源程序的建立 (11)5.2程序调试与运行结果 (12)6心得体会 (14)参考文献 (15)附录一源程序及其注释 (16)附录二程序运行效果图 (23)附录三本科生课程设计成绩评定表 (24)摘要本文通过汇编语言设计实现简单的代码转换功能,把输入的小写字母转换为大写字母和输入的二进制转换为十六进制,并显示转换结果。
程序设计过程中将调用DOS提供的多种中断功能,结合汇编语言灵活的指令方式,完成代码的转换。
最后会用到DEBUG工具和其他方法调试程序,最终实现较理想的效果。
关键词:DOS 代码转换 ASCII代码转换程序1设计任务要求1.1实现任务设计任务要求是:字母或数制之间的转化程序,按S后,键盘输入小写字母,显示对应的大写字母,按B后,键盘输入二进制数,显示对应的十六进制数。
结果显示在屏幕上。
按Q退出程序。
1.2任务分析根据设计要求分析可知,本程序主要完成不同代码间的转换,并在屏幕上显示转换结果。
在程序提示下输入功能选择键S或B,来确定程序执行小写字母转换为大写字母或将二进制数转换为十六进制显示。
转换过程可以循环进行,直到输入退出功能键Q或q。
2方案比较在程序设计中,有时可以将具有特定功能的一定代码块定义为一个过程,使整个程序清晰,便于理解和调试。
此代码块的定义有宏定义和段内子程序定义两种方法。
下面是功能模块定义方式的选择:方案一:宏定义可以将需重复使用的程序部分定义为一条宏指令,汇编后产生所需代码序列,在程序中需要的地方嵌入。
这种方法与过程调用不同,它不使用堆栈,可减少程序的书写。
宏调用时的实元表,可以避免子程序中因变量传送带领的麻烦。
且宏调用中的实元还可以是常数、寄存器、存储单元名以及用寻址方式能找到的地址表达式,这样使程序灵活性增强。
然而,宏调用每调用一次就将宏定义展开一次,调用次数越多,占用的存储空间就越大。
即宏指令的使用只简化了源程序,不节省目标程序所占用的内存单元。
方案二:子程序在程序代码段内编写,在程序运行期间,由主程序调用,在目标代码中只占用它自身大小的内存空间。
使用调用子程序的方法,汇编后产生的目标代码少,节约空间。
但是,它在简化程序方面不如宏指令方便。
经比较,因本设计对子程序的调用次数较多,且子程序段较短,合理规划,仍可以使程序具有很高的可读性。
故采用调用子程序的方法。
3系统实现原理3.1系统资源8086CPU曾是使用广泛的16位微处理器,它的出现使对微型计算机的发展起到了巨大的推动作用。
它的指令集为用户提供了丰富的8位指令和一些功能较强的16位数据处理指令。
8086的指令具有灵活的指令格式、较强的运算能力和极强的寻址能力。
为此,虽然各种高级语言为我们开发大型复杂系统提供了方便,但在对运算速度和效率极高的地方,8086汇编语言还是占有稳定的地位。
而8086指令系统的运行只需一台具有虚拟8086的计算机即可运行。
除此之外8086还为我们提供了丰富的DOS功能和BIOS功能调用,方便我们处理各种需求。
本设计即使用到多种DOS功能来辅助完成软件编写和完善功能。
3.2DOS功能调用DOS是美国Microsoft公司为IBM PC研制的磁盘擦配置系统(Disc Operating System)。
DOS不仅为用户提供了许多使用命令,而且还有用户可以直接调用的上百个常用子程序。
这些子程序的功能主要是进行磁盘的读/写、控制管理、内存管理、基本输入/输出管理等。
在使用时,用户不需要了解各种I/O接口硬件的详细情况就能直接完成对I/O的控制和管理。
为方便使用,DOS将所有子程序从1号开始顺序编号,这些编号成为DOS功能调用号。
其调用过程为:1、DOS功能调用号传送AH寄存器。
2、如果需要,按照要求给定输入参数(有的不需要输入参数)。
3、写入中断指令INT 21H。
调用结束,按功能使用其输出参数。
以下介绍本设计将使用到的几个有关DOS功能。
1.单字符输入-1号功能:从键盘输入1个字符并在光标处显示。
输入参数:无。
输出参数:AL=ASCII码。
2.单字符输入-8号功能:从键盘输入1个字符,不在屏幕上显示。
输入参数:无。
输出参数:AL=ASCII码。
3.单字符输出-2号功能:在屏幕上显示一个字符(ASCII码)。
输入参数:DL=ASCII码。
输出参数:无。
4.多字符输出-9号功能:多个字符输出到屏幕显示。
输入参数:DS:DX=输出字符缓冲区首地址。
输出参数:无。
5.过程终止-4CH号该调用功能是结束当前程序,并且返回调用它的程序。
如果在DEBUG状态下运行,则返回DEBUG;如过在DOS下运行,则返回DOS。
在汇编语言结束处加上“MOV AH,4CH”和“INT 21H”两条指令,以利于程序执行完毕,返回操作系统控制。
4.软件设计与实现4.1程序设计思想通过调用DOS系统的输入输出功能,使程序具有一定的可视化程度,使用8086丰富的指令系统对输入数据进行处理,最终得到运算结果,在屏幕输出。
因为本设计需满足两个功能,并需输入多字符,故将使用汇编语言的顺序结构、分支结构和循环结构。
主程序初始化后,再提示信息下输入功能选择键,程序会根据输入的键跳入相应的子程序中执行代码转换。
这是一个分支结构。
子程序执行完毕,可以根据需要选择结束程序或继续下一次转换。
4.1.1程序功能描述启动程序后,在DOS框中提示输入功能选择键后,程序会跳转到所选择的相应的程序段执行,在提示下输入小写字母或16位二进制,当输入完毕后,屏幕上会显示运算结果。
然后,系统提示是否继续,此时可以选择进行下一次代码转换或结束程序。
为方便观察转换结果,程序中的输入字符显示与提示信息的显示都将分行显示。
由于程序中的提示信息比较齐全和完善,很容易指导操作者进行代码转换。
4.1.2流程图主程序开始后,先进行初始化,装载相关参数。
然后会有功能选择的提示,根据提示输入选择符号“S”或“B”选择要进行是数据转换功能。
输入选择后,程序跳入相应的子程序中去执行转换并显示结果。
子程序结束后返回主程序退出选择处,此时需要根据信息提示,选择是继续转换还是结束程序。
子程序的选择是一个分支结构,而子程序中的转换代码含有顺序结构和循环结构,具体见子程序流程图。
主程序流程图如下:开始初始化功能选择小写字母转换为大写子程序二进制转为十六进制子程序是否退出结束S BYN 图4-1 主程序流程图本程序有两个子程序,分别为小写字母转大写字母子程序和二进制转十六进制子程序。
二者的选择调用由主程序的功能选择决定。
小写字母转大写子程序流程图:子程序入口提示输入小写字母输入字符是否为小写Y转换 -20H显示结果子程序结束图4-2 小写字母转大写流程图小写字母转大写字母子程序结构较简单,转换步骤少,易于实现功能。
当调用此子程序时,程序指针跳转到子程序入口,沿其流程执行。
因输入字符在计算机中都以其ASCII值录入,在DOS显示时也是以ASCII码值输出,故只需对输入字符的ASCII码做处理即可。
因为前文所述,对于小写字母的ASCII码减去20H 即对应相应大写字母的ASCII码,然后调用DOS显示功能即可显示转换结果。
二进制转十六进制子程序流程图: 子程序入口提示输入16位二进制按位输入是否为1或0是否输完16位显示,并设置二进制数相应位数据转换并存储显示结果子程序结束NNYY图4-3 二进制转十六进制流程图主程序跳转如进制转换程序时,将沿其流程执行下去。
因为要输入16位二进制数,而每次输入均为单字符输入,输入参数为ASCII码值,故需根据输入值对初始十六进制数做处理。
首先预设一个16位变量,输入按书写习惯,从最高位开始输入,当输入“1”时,将对于位置位1,输入“0”时,将对应位置位0,同时输入次数加一,若输入为“1”“0”以外的值,不对初始变量做处理,输入位数也不变,如此输入16位后,输入段结束,程序自动开始代码的转换,并将转换的结果显示出来,最后跳回主程序,选择是否退出程序。
4.2算法分析4.2.1小写字母转大写字母算法对于DOS提供的键盘输入子程序,输入的字符在计算机内部均以ASCII码形式存在。
而小写英文字母“a”〜“z”的ASCII码为61H〜7AH,大写字母“A”〜“Z”的ASCII码为41H〜5AH。
观察可知对应的小写字母ASCII码值比大写字母ASCII码值要大20H,即32。
因此对输入的小写字母的ASCII码减去32即为对应的大写字母的ASCII值,利用DOS提供的单字符显示子程序可将转换结果显示在屏幕上。
4.2.2二进制转换为十六进制算法在本程序中暂且将输入的二进制数位数设置为16位。
对于16位二进制数,其转换为十六进制的过程为:从最低位开始,每四位为一个单元,计算出对于的十六进制值。
计算得到的十六进制值小于10的仍旧用1〜9表示,高于9的则使用a〜f(A〜F也可以)表示10〜15。
在显示方面,输入二进制可以按位,调用DOS的单字符输入子程序,输入1或0,对于其他数据则不显示。
当输入达到十六位后,开始转换。
因转换的结果为0〜9、A〜F,而屏幕显示对应值的ASCII值。
0〜9的ASCII码值为30H〜39H,A〜F的ASCII码值为41H〜46H。