您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 汇编数值转换器大作业解读
《汇编语言程序设计》大作业报告《《汇编语言程序设计》综合程序设计实验报告题目:数制转换器班级:信1101-2班姓名:王兵茹李夏蕾胡佳奇学号:201129172011291220113013完成日期:2013-11-24《汇编语言程序设计》大作业报告目录一、简介二、小组成员及具体分工三、需求分析与设计四、代码及分析五、总结《汇编语言程序设计》大作业报告一、简介本设计利用汇编语言来实现数制转换设计,用于方便进制之间的互换。设计的内容可以使十六进制、八进制、二进制、十进制的数制互相转换。二.小组成员及具体分工小组成员:王兵茹李夏蕾胡佳奇具体分工:我们三个一开始是各自的分工查资料,先看看单个数制转换,王兵茹负责的是十六进制,李夏蕾负责的是十进制,胡佳琪负责的是二进制。最后我们几个一起完成了程序的主要设计,由于大体思路相同,最后加上了八进制的转换。在程序的修改方面,王兵茹进行了后期的加工,增加了dios中断,把单调的退出改成文本形式下的退出,在退出之前,执行清屏。最后我们几个商量着完成了实验报告和ppt的制作,经过我们几个人的努力,虽然做的不是特别好,但还是各有收获。三、需求分析与设计●需求分析通过编程实现显示菜单,然后通过键盘输入菜单相应的选项进入相应的数制转换,然后通过选项对应的子程序跳转来实现转换,子程序中通过宏定义定义数制前后的数制,并且在宏定义过程中实现数制转换算法,最后输出转换后的进制数。●设计①运行的设计框图②整个系统的设计框图Debug运行的显示的数值转换的菜单八进制转换为二进制二进制转换为十六进制二进制转换为十进制二进制转换为八进制十进制转换为二进制八进制转换为十六进制八进制转换为十进制十进制转换为八进制十进制转换为十六进制十六进制转换为十进制十六进制转换为二进制十六进制转换为八进制《汇编语言程序设计》大作业报告③子程序之间调用关系框图我们的这个程序主要就是用到的子程序的调用和大量的宏定义,对于输入时的宏定义有charin,strin,numin,输出时的宏定义有charout,strout,numout,输出的时候用到的是栈push和pop,在压栈push时,用到了irp不定重复伪操作。定义通用inax宏,确定转换之前的进制,例如inaxcx、cx=2是把转换之前的进制确定为2存到cx中定义通用outax宏,确定转换之后的进制,例如outaxbx、bx=2是把转换之后的进制确定为2存到bx中通用宏charin逐个输入转换之前进制字符选择菜单输入选择输入转换的进制数子程序调用输出转换后的数据循环操作退出退出时,加了一个文本界面,用到dios中断,int10h《汇编语言程序设计》大作业报告输入的具体框图如下:通用宏inax,来确定转换之前的进制charin宏来逐个输入转换之前的字符回车(来确定输入完成)判断输入的字符al=?判断输入的字符al=?判断输入的字符al=?将字符的ASCII码转换成数值送到ax中ax=?ax←ax*cxax出栈ax=0!=000~99AAA~ZFaorza~z《汇编语言程序设计》大作业报告输出的具体框图如下通用宏outax,确定转换之后的进制判断第一步的ax为多少判断之前保存的余数ax/bxal←商dx←余数把dx压入堆栈保存,保存之后清空dxcx←cx+1用来记录余数个数把它的ASCII码加上55得到相应的字符逐个输出继续执行直到ax为0不为0输出后返回上一步处理下一个余数直到堆栈中没有余数1010直接输出《汇编语言程序设计》大作业报告四、代码及分析程序运行源代码如下:;*************************************************************************************datasegmentspacedb1000dup('')str1db10dup(''),9dup(''),'Welcometoshuzhizhuanhuan!!!',52dup('')str12db240dup(''),9dup(''),'Thankyou!!!',412dup('')clear_screenMACRO;清屏宏定义movah,06hmoval,0movbh,0f0h;白底黑字movch,0;从0行0列到23行79列清屏movcl,0movdh,23movdl,79int10hmovdx,0;光标在左上角movah,2int10h;调用biosENDMmenudb10,13,'*************************************************'db10,13,'*************************************************'db10,13,'*pleasechoiceaction:*'db10,13,'*a.binary2tooctal8*'db10,13,'*b.binary2todecimal10*'db10,13,'*c.binary2tohexadecimal16*'db10,13,'*d.octal8tobinary2*'db10,13,'*e.octal8todecimal10*'db10,13,'*f.octal8tohexadecimal16*'db10,13,'*g.decimal10tobinary2*'db10,13,'*h.decimal10tooctal8*'db10,13,'*i.decimal10tohexadecimal16*'db10,13,'*j.hexadecimal16tobinary2*'db10,13,'*k.hexadecimal16tooctal8*'db10,13,'*l.hexadecimal16todecimal10*'db10,13,'*m.exit*'db《汇编语言程序设计》大作业报告10,13,'*************************************************',10,13,'$';**************************************************************;2进制转换为16进制和10进制和8进制str2db10,13,'pleaseinputthebinarystring:',10,13,'$'str21db'thehexadecimalstringis:',10,13,'$'str22db'thedecimalstringis:',10,13,'$'str23db'theoctalstringis:',10,13,'$';16进制转换为2进制和8进制和10进制str3db10,13,'pleaseinputthehexadecimalstring:',10,13,'$'str31db'thebinarystringis:',10,13,'$'str32db'theoctalstringis:',10,13,'$'str33db'thedecimalstringis:',10,13,'$';10进制转换为2进制和8进制和16进制str4db10,13,'pleaseinputthedecimalstring:',10,13,'$'str41db'thebinarystringis:',10,13,'$'str42db'theoctalstringis:',10,13,'$'str43db'thehexadecimalstringis:',10,13,'$';8进制转换为2进制和10进制和16进制str5db10,13,'pleaseinputtheoctalstring:',10,13,'$'str51db'thebinarystringis:',10,13,'$'str52db'thedecimalstringis:',10,13,'$'str53db'thehexadecimalstringis:',10,13,'$'str0db10,13,'ERROR!pleaseinputa~m:',13,10,'$';在数据段定义字符,数字,字符串的输入输出的宏定义;*************************************************charinmacro;字符输入movah,01hint21hendm;************************************************numinmacro;数字输入charin;调用charin宏定义subal,48;48d=30h,将字符转换为数字endm;****************************************************strinmacrostringin;字符串输入leadx,stringinmovah,0ahint21hendm;****************************************************charoutmacrooutchar;字符输出《汇编语言程序设计》大作业报告irprec,ax,dx;不定重复伪操作pushrecendm;pushax;pushdxmovdl,outcharmovah,02hint21hpopdxpopaxendm;***************************************************numoutmacrooutnum;数字输出pushaxpushdxmovdl,outnumadddl,48movah,02hint21hpopdxpopaxendm;**************************************************stroutmacrostringout;字符串输出pushaxpushdxleadx,stringoutmovah,9int21hpopdxpopaxendmdataendsstacksegmentstackdw200dup(?)stackends;*************************************************codesegmentassumecs:code,ds:data,es:data,ss:stack;********************************************************endlmacro《汇编语言程序设计》大作业报告irpx,ax,bx,cx,dx;不定重复伪操作pushxendm;pushax;pushbx;pushcx;pushdxmovdl,0ah;回车换行movah,2int21hmovdl,0dhint21hpopdxpopcxpopbxpopaxendm;*******************************************************outaxmacrobasenumpushaxpushbxpushcxpushdxmovbx,basenumcalloutaxppopdxpopcxpopbxpopaxendm;*******************************************************outaxpprocmovdx,0movcx,0outaxp_circle:cmpax,0jeoutaxp_nextdivbxpushdxmovdx,0《汇编语言程序设计》大作业报告inccxjmpoutaxp_circleoutaxp_next:popaxcmpal,10jbnoutaddal,55;55d=37hcharoutaljmpcoutnout:numoutalcout:loopoutaxp_nextretoutaxpendp;**************************************************inaxmacrobasenumpushbxp
本文标题:汇编数值转换器大作业解读
链接地址:https://www.777doc.com/doc-7216636 .html