汇编数值转换器大作业Word格式文档下载.docx

上传人:b****3 文档编号:16654293 上传时间:2022-11-25 格式:DOCX 页数:20 大小:338.83KB
下载 相关 举报
汇编数值转换器大作业Word格式文档下载.docx_第1页
第1页 / 共20页
汇编数值转换器大作业Word格式文档下载.docx_第2页
第2页 / 共20页
汇编数值转换器大作业Word格式文档下载.docx_第3页
第3页 / 共20页
汇编数值转换器大作业Word格式文档下载.docx_第4页
第4页 / 共20页
汇编数值转换器大作业Word格式文档下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

汇编数值转换器大作业Word格式文档下载.docx

《汇编数值转换器大作业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编数值转换器大作业Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。

汇编数值转换器大作业Word格式文档下载.docx

3子程序之间调用关系框图

我们的这个程序主要就是用到的子程序的调用和大量的宏定义,对于输入时的宏定义有charin,strin,numin,输出时的宏定义有charout,strout,numout,输出的时候用到的是栈push和pop,在压栈push时,用到了irp不定重复伪操作。

定义通用inax宏,确定转换之前的进制,例如inaxcx、cx=2是把转换之前的进制确定为2存到cx中

定义通用outax宏,确定转换之后的进制,例如outaxbx、bx=2是把转换之后的进制确定为2存到bx中

通用宏charin逐个输入转换之前进制字符

输入的具体框图如下:

输出的具体框图如下

程序运行源代码如下:

;

*************************************************************************************

datasegment

spacedb1000dup('

'

str1db10dup('

),9dup('

),'

Welcometoshuzhizhuanhuan!

!

'

52dup('

str12db240dup('

Thankyou!

412dup('

clear_screenMACRO;

清屏宏定义

movah,06h

moval,0

movbh,0f0h;

白底黑字

movch,0;

从0行0列到23行79列清屏

movcl,0

movdh,23

movdl,79

int10h

movdx,0;

光标在左上角

movah,2

int10h;

调用bios

ENDM

menudb10,13,'

*************************************************'

db10,13,'

*pleasechoiceaction:

*'

*a.binary2tooctal8*'

*b.binary2todecimal10*'

*c.binary2tohexadecimal16*'

*d.octal8tobinary2*'

*e.octal8todecimal10*'

*f.octal8tohexadecimal16*'

*g.decimal10tobinary2*'

*h.decimal10tooctal8*'

*i.decimal10tohexadecimal16*'

*j.hexadecimal16tobinary2*'

*k.hexadecimal16tooctal8*'

*l.hexadecimal16todecimal10*'

*m.exit*'

10,13,'

$'

**************************************************************

2进制转换为16进制和10进制和8进制

str2db10,13,'

pleaseinputthebinarystring:

10,13,'

str21db'

thehexadecimalstringis:

str22db'

thedecimalstringis:

str23db'

theoctalstringis:

16进制转换为2进制和8进制和10进制

str3db10,13,'

pleaseinputthehexadecimalstring:

str31db'

thebinarystringis:

str32db'

str33db'

10进制转换为2进制和8进制和16进制

str4db10,13,'

pleaseinputthedecimalstring:

str41db'

str42db'

str43db'

8进制转换为2进制和10进制和16进制

str5db10,13,'

pleaseinputtheoctalstring:

str51db'

str52db'

str53db'

str0db10,13,'

ERROR!

pleaseinputa~m:

13,10,'

在数据段定义字符,数字,字符串的输入输出的宏定义

*************************************************

charinmacro;

字符输入

movah,01h

int21h

endm

************************************************

numinmacro;

数字输入

charin;

调用charin宏定义

subal,48;

48d=30h,将字符转换为数字

****************************************************

strinmacrostringin;

字符串输入

leadx,stringin

movah,0ah

****************************************************

charoutmacrooutchar;

字符输出

irprec,<

ax,dx>

;

不定重复伪操作

pushrec

endm

;

pushax

pushdx

movdl,outchar

movah,02h

popdx

popax

***************************************************

numoutmacrooutnum;

数字输出

pushax

pushdx

movdl,outnum

adddl,48

**************************************************

stroutmacrostringout;

字符串输出

leadx,stringout

movah,9

dataends

stacksegmentstack

dw200dup(?

stackends

codesegment

assumecs:

code,ds:

data,es:

data,ss:

stack

********************************************************

endlmacro

irpx,<

ax,bx,cx,dx>

pushx

endm

pushbx

pushcx

movdl,0ah;

回车换行

movah,2

movdl,0dh

popcx

popbx

*******************************************************

outaxmacrobasenum

pushbx

pushcx

movbx,basenum

calloutaxp

outaxpproc

movdx,0

movcx,0

outaxp_circle:

cmpax,0

jeoutaxp_next

divbx

pushdx

inccx

jmpoutaxp_circle

outaxp_next:

cmpal,10

jbnout

addal,55;

55d=37h

charoutal

jmpcout

nout:

numoutal

cout:

loopoutaxp_next

ret

outaxpendp

inaxmacrobasenum

movcx,basenum

callinaxp

inaxpproc

movax,0

inaxp0:

inaxp1:

charin

cmpal,13;

判断输入的是不是回车

jeinaxe

cmpal,'

0'

jbinaxp1

9'

jainaxnext1

subal,48

jmpinaxnum

inaxnext1:

A'

jbinaxp1

F'

jainaxnext2

subal,55

jmpinaxnum

inaxnext2:

a'

z'

jainaxp1

subal,87

inaxnum:

movbh,0

movbl,al

cmpax,0

jeinaxadd

mulcx

inaxadd:

addax,bx

jmpinaxp0

inaxe:

popax

inaxpendp

start:

movax,data

movds,ax

moves,ax

leabp,space

movdx,0b00h

movcx,1000

movbx,0020h

movax,1300h

leabp,str1;

显示welcome

movdx,0600h

movcx,120

movbx,000eh

movax,1301h

display:

stroutmenu

charin

cmpal,'

jebin2_oct8

jlerr

b'

jebin2_dec10

c'

jebin2_hex16

d'

jeoct8_bin2

e'

jeoct8_dec10

f'

jeoct8_hex16

g'

jedec10_bin2

h'

jedec10_oct8

i'

jedec10_hex16

j'

jehex16_bin2

k'

jehex16_oct8

l'

jehex16_dec10

m'

jeexit

n'

jnlerr

clear_screen

jmpdisplay

err:

stroutstr0

jmpdisplay

*****************************************************

bin2_hex16:

二进制转换

stroutstr2

inax2

endl

stroutstr21

outax16

jmpdisplay

bin2_dec10:

inax2

stroutstr22

outax10

bin2_oct8:

stroutstr23

outax8

*************************************************

hex16_bin2:

十六进制转换

stroutstr3

inax16

stroutstr31

outax2

hex16_oct8:

stroutstr32

outax8

jmpdisplay

hex16_dec10:

stroutstr33

outax10

dec10_bin2:

十进制转换

stroutstr4

inax10

stroutstr41

outax2

dec10_oct8:

stroutstr42

jmpdisplay

dec10_hex16:

stroutstr43

outax16

***********************************************************

oct8_bin2:

八进制转换

inax8

oct8_dec10:

oct8_hex16:

**********************************************************

exit:

clear_screen;

调用宏定义,清屏

leabp,str12

movcx,520

movbx,004eh

movah,4ch

int21h

codeends

endstart

程序运行结果截图:

(包括正确输入和错误输入)

本次大作业,考虑到我们平时对数制转换的应用,并且各个进制转换起来使人头痛,我们组做的是一个数制转换器。

我们实现的就是各个数制之间的转换,一共有12个,在实现数制转换中,我们用到的有子程序的调用,还有就是广泛应用了宏定义,主要是想是下面的程序调用起来更方便直接。

在这次实验中我们也遇到了不少的问题,本来一开始我们打算做一个windows窗体,但是asm软件这部分不是免费的,所以我们只能做dos的界面了。

还有就是在程序中子程序之间的调用,输入用到了宏,由于是各个进制之间的转换,有数字也有字符,所以光输入就用到了charin,strin,numin等通用的宏定义,在宏定义中由于有push和pop的多次操作,我们就用irp不定重复伪操作来实现的。

在输出的时候用到的宏有charout,strout,numout。

后来有进行了改进,我们在一开始的界面加了文本颜色,由于能力有限,只有在第一次运行时有,在显示welcome是加到了bios中断,还有,在退出的时候,我们增加了一个thankyou的文本界面,也是用到了dios中断,int10h,在显示这个界面前,我们调用了一个清屏宏。

总结这次大作业,虽然费了很大的劲,经过我们几个的商讨,结果还算令我们满意,在这次实验中,我们组的成员都很积极,都有自己的收获。

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

当前位置:首页 > PPT模板 > 中国风

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

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