资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
汇编语言程序设计大作业报告汇编语言程序设计汇编语言程序设计综合程序设计实验报告综合程序设计实验报告题题目:目:数制转换器数制转换器班班级:级:信信 1101-21101-2班班姓姓名:名:王兵茹王兵茹李夏蕾李夏蕾胡佳奇胡佳奇学学号:号:2011301320113013完成日期:完成日期:2013-11-242013-11-24汇编语言程序设计大作业报告目录目录一、简介一、简介二、小组成员及具体分工二、小组成员及具体分工三、需求分析与设计三、需求分析与设计四、代码及分析四、代码及分析五、总结五、总结汇编语言程序设计大作业报告一、简介一、简介本设计利用汇编语言来实现数制转换设计,用于方便进制之间的互换。设计的内容可以使十六进制、八进制、二进制、十进制的数制互相转换。二小组成员及具体分工小组成员及具体分工小组成员:王兵茹 李夏蕾胡佳奇具体分工:我们三个一开始是各自的分工查资料,先看看单个数制转换,王兵茹负责的是十六进制,李夏蕾负责的是十进制,胡佳琪负责的是二进制。最后我们几个一起完成了程序的主要设计,由于大体思路相同,最后加上了八进制的转换。在程序的修改方面,王兵茹进行了后期的加工,增加了 dios 中断,把单调的退出改成文本形式下的退出,在退出之前,执行清屏。最后我们几个商量着完成了实验报告和 ppt 的制作,经过我们几个人的努力,虽然做的不是特别好,但还是各有收获。三、需求分析与设计三、需求分析与设计需求分析需求分析通过编程实现显示菜单, 然后通过键盘输入菜单相应的选项进入相应的数制转换, 然后通过选项对应的子程序跳转来实现转换, 子程序中通过宏定义定义数制前后的数制, 并且在宏定义过程中实现数制转换算法,最后输出转换后的进制数 。 设计设计 运行的设计框图Debug 运行的显示的数值转换的菜单二进制转换为八进制二进制转换为十进制二进制转换为十六进制八进制转换为二进制八进制转换为十进制八进制转换为十六进制十进制转换为二进制十进制转换为八进制十进制转换为十六进制十六进制转换为二进制十六进制转换为八进制十六进制转换为十进制整个系统的设计框图汇编语言程序设计大作业报告选择菜单输入选择循环操作输入转换的进制数退出子程序调用退出时, 加了一个文本界面, 用到dios 中断,int 10h输出转换后的数据 子程序之间调用关系框图我们的这个程序主要就是用到的子程序的调用和大量的宏定义,对于输入时的宏定义有 charin,strin,numin,输出时的宏定义有 charout,strout,numout,输出的时候用到的是栈 push 和 pop,在压栈 push 时,用到了 irp 不定重复伪操作。定义通用 inax 宏,确定转换之前的进制,例如inax cx、cx=2 是把转换之前的进制确定为 2 存到 cx 中定义通用 outax 宏,确定转换之后的进制,例如outax bx、bx=2 是把转换之后的进制确定为 2 存到 bx 中通用宏 charin 逐个输入转换之前进制字符汇编语言程序设计大作业报告输入的具体框图如下:通用宏 inax,来确定转换之前的进制charin 宏来逐个输入转换之前的字符回车(来确定输入完成)9F判断输入的字符 al=?z09将字符的 ASCII 码转换成数值送到 ax 中ax=0AZax=?!=0axax*cxax 出栈az汇编语言程序设计大作业报告输出的具体框图如下通用宏 outax,确定转换之后的进制继续执行直到ax判断第一步的 ax 为多少不为 0ax/bx输 出后 返回 上一 步处 理下 一个 余数 直到 堆栈 中没 有余数判断之前保存的余数10为0al商dx余数把它的 ASCII 码加上 55得到相应的字符把 dx 压入堆栈保存,保存之后清空 dx逐个输出cxcx+1 用来记录余数个数汇编语言程序设计大作业报告四、代码及分析四、代码及分析程序运行源代码如下:程序运行源代码如下:;*data segmentspace db 1000 dup( )str1 db 10 dup( ),9 dup( ),Welcome to shuzhizhuanhuan,52 dup()str12 db 240 dup ( ),9 dup( ),Thank you,412 dup( )clear_screen MACRO ;清屏宏定义mov ah,06hmov al,0mov bh,0f0h ;白底黑字mov ch,0;从0行0列到23行79列清屏mov cl,0mov dh,23mov dl,79 int 10hmov dx,0 ;光标在左上角mov ah,2 int 10h;调用biosENDMmenudb 10,13,*db 10,13,*db 10,13,* please choice action: *db 10,13,* a.binary 2 to octal 8 *db 10,13,* b.binary 2 to decimal 10 *db 10,13,* c.binary 2 to hexadecimal 16 *db 10,13,* d.octal 8 to binary 2 *db 10,13,* e.octal 8 to decimal 10 *db 10,13,* f.octal 8 to hexadecimal 16 *db 10,13,* g.decimal 10 to binary 2 *db 10,13,* h.decimal 10 to octal 8 *db 10,13,* i.decimal 10 to hexadecimal 16 *db 10,13,* j.hexadecimal 16 to binary 2 *db 10,13,* k.hexadecimal 16 to octal 8 *db 10,13,* l.hexadecimal 16 to decimal 10 *db 10,13,* m.exit *db汇编语言程序设计大作业报告10,13,*,10,13,$;*;2进制转换为16进制和10进制和8进制str2db 10,13,please input the binary string:,10,13, $str21db the hexadecimal string is:,10,13, $str22db the decimal string is:,10,13, $str23db the octal string is:,10,13, $;16进制转换为2进制和8进制和10进制str3db 10,13,please input the hexadecimal string:,10,13,str31db the binary string is:,10,13, $str32db the octal string is:,10,13, $str33db the decimal string is:,10,13, $;10进制转换为2进制和8进制和16进制str4db 10,13,please input the decimal string:,10,13, $str41db the binary string is:,10,13, $str42db the octal string is:,10,13, $str43db the hexadecimal string is:,10,13, $;8进制转换为2进制和10进制和16进制str5db 10,13,please input the octal string:,10,13, $str51db the binary string is:,10,13, $str52db the decimal string is:,10,13, $str53db the hexadecimal string is:,10,13, $str0db 10,13,ERROR! please input am:,13,10,$;在数据段定义字符,数字,字符串的输入输出的宏定义;*charin macro;字符输入mov ah,01hint 21hendm;*numin macro;数字输入charin;调用charin宏定义sub al,48;48d=30h,将字符转换为数字endm;*strin macro stringin ;字符串输入lea dx,stringinmov ah,0ahint 21hendm;*charoutmacro outchar;字符输出$汇编语言程序设计大作业报告 irp rec, ;不定重复伪操作push rec endm;push ax;push dxmov dl, outcharmov ah, 02hint 21hpop dxpop axendm;*numout macro outnum;数字输出push axpush dxmov dl, outnumadd dl, 48mov ah, 02hint 21hpop dxpop axendm;*strout macro stringout;字符串输出push axpush dxlea dx, stringoutmov ah, 9int 21hpop dxpop axendmdataendsstack segment stackdw 200 dup(?)stack ends;*code segmentassume cs:code,ds:data,es:data,ss:stack;*endl macro汇编语言程序设计大作业报告 irp x, ;不定重复伪操作push x endm;push ax;push bx;push cx;push dxmov dl, 0ah;回车换行mov ah, 2int 21hmov dl, 0dhint 21hpop dxpop cxpop bxpop axendm;*outaxmacrobasenumpush axpush bxpush cxpush dxmov bx, basenumcall outaxppop dxpop cxpop bxpop axendm;*outaxp procmov dx,0mov cx,0outaxp_circle:cmp ax,0je outaxp_nextdiv bxpush dxmov dx,0汇编语言程序设计大作业报告inc cxjmp outaxp_circleoutaxp_next:pop axcmp al,10jb noutadd al,55;55d=37hcharout aljmp coutnout:numout alcout:loop outaxp_nextretoutaxp endp;*inax macro basenumpush bxpush cxpush dxmov cx, basenumcall inaxppop dxpop cxpop bxendm;*inaxpprocmov ax, 0inaxp0:push axinaxp1:charincmp al, 13;判断输入的是不是回车je inaxecmp al, 0jb inaxp1cmp al, 9ja inaxnext1sub al, 48jmp inaxnuminaxnext1:cmp al, A汇编语言程序设计大作业报告jb inaxp1cmp al, Fja inaxnext2sub al, 55jmp inaxnuminaxnext2:cmp al, ajb inaxp1cmp al, zja inaxp1sub al, 87jmp inaxnuminaxnum:mov bh, 0mov bl, alpop axcmp ax, 0je inaxaddmul cxinaxadd:add ax, bxjmp inaxp0inaxe:pop axretinaxp endp;*start:mov ax,datamov ds,axmov es,axlea bp,spacemov dx,0b00hmov cx,1000mov bx,0020hmov ax,1300h int 10hlea bp,str1;显示welcomemov dx,0600hmov cx,120mov bx,000eh汇编语言程序设计大作业报告mov ax,1301h int 10h display:strout menucharincmp al,aje bin2_oct8jl errcmp al,bje bin2_dec10cmp al,cje bin2_hex16cmp al,dje oct8_bin2cmp al,eje oct8_dec10cmp al,fje oct8_hex16cmp al,gje dec10_bin2cmp al,hje dec10_oct8cmp al,ije dec10_hex16cmp al,jje hex16_bin2cmp al,kje hex16_oct8cmp al,lje hex16_dec10cmp al,mje exitcmp al,njnl errclear_screenjmp displayerr: strout str0 jmp display;*bin2_hex16:;二进制转换strout str2汇编语言程序设计大作业报告inax 2endlstrout str21outax 16jmp displaybin2_dec10:strout str2inax 2endlstrout str22outax 10jmp displaybin2_oct8:strout str2inax 2endlstrout str23outax 8jmp display;*hex16_bin2:;十六进制转换strout str3inax 16endlstrout str31outax 2jmp displayhex16_oct8:strout str3inax 16endlstrout str32outax 8jmp displayhex16_dec10:strout str3inax 16endlstrout str33outax 10jmp display;*dec10_bin2:;十进制转换strout str4汇编语言程序设计大作业报告inax 10endlstrout str41outax 2jmp displaydec10_oct8:strout str4inax 10endlstrout str42outax 8jmp displaydec10_hex16:strout str4inax 10endlstrout str43outax 16jmp display;*oct8_bin2:;八进制转换strout str4inax 8endlstrout str41outax 2jmp displayoct8_dec10:strout str4inax 8endlstrout str42outax 10jmp displayoct8_hex16:strout str4inax 8endlstrout str43outax 16jmp display;*exit:clear_screen;调用宏定义,清屏lea bp,str12汇编语言程序设计大作业报告mov dx,0600hmov cx,520mov bx,004ehmov ax,1301h int 10hmov ah,4chint 21h;*code endsend start程序运行结果截图:程序运行结果截图: (包括正确输入和错误输入)(包括正确输入和错误输入)汇编语言程序设计大作业报告汇编语言程序设计大作业报告五、总结五、总结本次大作业,考虑到我们平时对数制转换的应用, 并且各个进制转换起来使人头痛, 我们组做的是一个数制转换器。我们实现的就是各个数制之间的转换,一共有12 个,在实现数制转换中,我们用到的有子程序的调用, 还有就是广泛应用了宏定义, 主要是想是下面的程序调用起来更方便直接。在这次实验中我们也遇到了不少的问题,本来一开始我们打算做一个 windows 窗体,但是 asm 软件这部分不是免费的, 所以我们只能做 dos 的界面了。 还有就是在程序中子程序之间的调用,输入用到了宏,由于是各个进制之间的转换,有数字也有字符,所以光输入就用到了 charin,strin,numin 等通用的宏定义,在宏定义中由于有 push 和 pop 的多次操作,我们就用 irp 不定重复伪操作来实现的。在输出的时候用到的宏有charout,strout,numout。后来有进行了改进,我们在一开始的界面加了文本颜色, 由于能力有限,只有在第一次运行时有, 在显示 welcome 是加到了 bios 中断, 还有, 在退出的时候, 我们增加了一个 thankyou 的文本界面,也是用到了dios 中断,int10h,在显示这个界面前,我们调用了一个清屏宏。总结这次大作业,虽然费了很大的劲,经过我们几个的商讨, 结果还算令我们满意,在这次实验中,我们组的成员都很积极,都有自己的收获。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号