汇编数值转换器大作业解读
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《汇编语言程序设计》
综合程序设计实验报告
题目:数制转换器
班级:信1101-2班
姓名:王兵茹李夏蕾
胡佳奇
学号:******** ********
20113013
完成日期:2013-11-24
目录
一、简介
二、小组成员及具体分工
三、需求分析与设计
四、代码及分析
五、总结
一、简介
本设计利用汇编语言来实现数制转换设计,用于方便进制之间的互换。设计的内容可以使十六进制、八进制、二进制、十进制的数制互相转换。
二.小组成员及具体分工
小组成员:王兵茹李夏蕾胡佳奇
具体分工:我们三个一开始是各自的分工查资料,先看看单个数制转换,王兵茹负责的是十六进制,李夏蕾负责的是十进制,胡佳琪负责的是二
进制。
最后我们几个一起完成了程序的主要设计,由于大体思路相同,最后加上了八进制的转换。
在程序的修改方面,王兵茹进行了后期的加工,增加了dios中断,把单调的退出改成文本形式下的退出,在退出之前,执行清屏。
最后我们几个商量着完成了实验报告和ppt的制作,经过我们几个人的努力,虽然做的不是特别好,但还是各有收获。
三、需求分析与设计
●需求分析
通过编程实现显示菜单,然后通过键盘输入菜单相应的选项进入相应的数制转换,然后通过选项对应的子程序跳转来实现转换,子程序中通过宏定义定义数制前后的数制,并且在宏定义过程中实现数制转换算法,最后输出转换后的进制数。
●设计
①运行的设计框图
②整个系统的设计框图
③子程序之间调用关系框图
我们的这个程序主要就是用到的子程序的调用和大量的宏定义,对于输入时的宏定义有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逐个输入转换之前进制字符
四、代码及分析
程序运行源代码如下:
;******************************************************************** *****************
data segment
space 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,06h
mov al,0
mov bh,0f0h ;白底黑字
mov ch,0 ;从0行0列到23行79列清屏
mov cl,0
mov dh,23
mov dl,79
int 10h
mov dx,0 ;光标在左上角
mov ah,2
int 10h ;调用bios
ENDM
menu db 10,13,'*************************************************' db10,13,'*************************************************'
db10,13,'* please choice action: *'
db10,13,'* a.binary 2 to octal 8 *'
db10,13,'* b.binary 2 to decimal 10 *'
db10,13,'* c.binary 2 to hexadecimal 16 *'
db10,13,'* d.octal 8 to binary 2 *'
db10,13,'* e.octal 8 to decimal 10 *'
db10,13,'* f.octal 8 to hexadecimal 16 *'
db10,13,'* g.decimal 10 to binary 2 *'
db10,13,'* h.decimal 10 to octal 8 *'
db10,13,'* i.decimal 10 to hexadecimal 16 *'
db10,13,'* j.hexadecimal 16 to binary 2 *'
db10,13,'* k.hexadecimal 16 to octal 8 *'
db10,13,'* l.hexadecimal 16 to decimal 10 *'
db10,13,'* m.exit *'
db
10,13,'*************************************************',10,13,' $'
;**************************************************************
;2进制转换为16进制和10进制和8进制
str2 db10,13,'please input the binary string:',10,13, '$'
str21 db'the hexadecimal string is:',10,13, '$'
str22 db'the decimal string is:',10,13, '$'
str23 db'the octal string is:',10,13, '$'
;16进制转换为2进制和8进制和10进制
str3 db10,13,'please input the hexadecimal string:',10,13, '$' str31 db'the binary string is:',10,13, '$'
str32 db'the octal string is:',10,13, '$'
str33 db'the decimal string is:',10,13, '$'
;10进制转换为2进制和8进制和16进制
str4 db10,13,'please input the decimal string:',10,13, '$'
str41 db'the binary string is:',10,13, '$'
str42 db'the octal string is:',10,13, '$'
str43 db'the hexadecimal string is:',10,13, '$'
;8进制转换为2进制和10进制和16进制
str5 db10,13,'please input the octal string:',10,13, '$'
str51 db'the binary string is:',10,13, '$'
str52 db'the decimal string is:',10,13, '$'
str53 db'the hexadecimal string is:',10,13, '$'
str0 db 10,13,'ERROR! please input a~m:',13,10,'$'
;在数据段定义字符,数字,字符串的输入输出的宏定义
;*************************************************
charin macro ;字符输入
mov ah,01h
int 21h
endm
;************************************************
numin macro ;数字输入
charin ;调用charin宏定义
sub al,48 ;48d=30h,将字符转换为数字
endm
;****************************************************
strin macro stringin ;字符串输入
lea dx,stringin
mov ah,0ah
int 21h
endm
;****************************************************
charout macro outchar ;字符输出