汇编语言代码转换课程设计Word格式文档下载.docx

上传人:b****3 文档编号:7145780 上传时间:2023-05-08 格式:DOCX 页数:18 大小:66.74KB
下载 相关 举报
汇编语言代码转换课程设计Word格式文档下载.docx_第1页
第1页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第2页
第2页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第3页
第3页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第4页
第4页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第5页
第5页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第6页
第6页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第7页
第7页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第8页
第8页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第9页
第9页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第10页
第10页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第11页
第11页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第12页
第12页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第13页
第13页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第14页
第14页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第15页
第15页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第16页
第16页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第17页
第17页 / 共18页
汇编语言代码转换课程设计Word格式文档下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编语言代码转换课程设计Word格式文档下载.docx

《汇编语言代码转换课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编语言代码转换课程设计Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。

汇编语言代码转换课程设计Word格式文档下载.docx

优( )、良( )、中( )、及格( )、不及格( )

评阅人:

   职称:

2007年1月12日

目 录

一、需求分析1

二、概要设计2

三、详细设计3

四、测试结果4

五、设计体会5

一、需求分析

1、实现大小写字母之间的转换:

输入的字符串中,不是字母的字符不改变;

大写字母改成小写字母时,若是大写字母则不改变;

同样,小写字母改成大写字母时,若是小写字母则不改变

2、二进制和十六进制数之间的转换:

输入一个二进制数(或十六进制数),用十六进制数(或二进制数)表示输出;

最多能把十六位二进制数(或四位十六进制数)用四位十六进制数(或十六位二进制数)表示输出;

小于十六位(或四位)时按回车结束并输出

3、十进制数和十六进制数之间的转换:

输入一个十进制数(或十六进制数),用十六进制数(或十进制数)表示输出;

最大能把十进制数65535(或十六进制数FFFF)转换成十六进制数FFFF(或十进制数65535)表示输出;

小于65535(或FFFF)时按回车结束并输出

二、概要设计

整个程序由四个主要的子程序和若干个辅助子程序组成,实现六个转换功能:

HEXIDEC用来把一个十六进制数转换成十进制数表示

BINARY用来把十六制数转换为十六位二进制数表示

DETOHE用来把一个十进制数转换成十六进制表示

BETOHE用来把一个十六位二进制数转换成十六进制输出

1、INPUT用来输入字符串

2、HEXIBIN用来输入一个十六进制数,并存放在BX中

3、BINIDEC用来把BX中十六进制转换到十进制

4、DEC_DIV用来除以各位十进制的权

5、PRINT用来把BX中的十六进制数转换成二进制

6、DECIBIN输入一个五位的十进制数

7、BINIHEX把BX中的十进制数转换成十六进制输出

8、INBIN输入十六二进制数

9、CRLF用来换行

三、详细设计

GAIXIEMACROP1,P2,P3,P4,P5,P6;

义该宏用来判定字母?

P2:

CMPBYTEPTR[SI],P3

JBP5

CMPBYTEPTR[SI],P4

JNBP5

CMPBYTEPTR[SI],'

$'

到$则结束

JZP6

P1BYTEPTR[SI],20H

P5:

INCSI

LOOPP2

P6:

LEADX,BUF1+2;

出改写后的字母

MOVAH,9;

调用9号中断功能,输出字符串

INT21H

LEADX,BF;

把BF首地址给CX

调用9号中断功能

INT21H

JMPSTART;

返回

ENDM

DATASEGMENT;

义数据段

BUFDB'

**********choosetheoperation**********'

0DH,0AH

DB'

1:

bigtosmall'

2:

smalltobig'

3:

hexadecimaltobinary'

4:

binarytohexadecimal'

5:

hexadecimaltodecimal'

6:

decimaltohexadecimal'

7:

EXIT'

0DH,0AH,'

BFDB0DH,0AH,'

BUF1DB21,?

20DUP(?

);

用来存放输入的字符串

BUF2DB'

enterahexdata:

BUF3DB'

Theinputiswrong,chooseagainplease:

BUF4DB'

enteradecidata:

BUF5DB'

enterabindata:

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETBUF;

出选择界面

MOVAH,1;

入要选择的操作

PUSHAX;

NT会改变AL的值,应压栈保护

POPAX;

把AX压栈保护

CMPAL,'

1'

把AL中内容跟1比较

JZBTOS;

相等则跳转到

2'

JZSTOB

3'

JZHTOB

4'

JZBTOH

5'

JZHTOD

6'

JZDTOH

7'

JZEXIT

LEADX,BUF3;

把BUF3的首地址给DX

MOVAH,9

CALLCRLF;

调用子程序CALL

返回,重新选择

EXIT:

MOVAH,4CH;

退出

BTOH:

CALLBETOHE;

调用二进制转十六进制子程序

HTOB:

CALLBINARY;

调用十六进制转二进制子程序

HTOD:

CALLHEXIDEC;

调用十六进制转十进制子程序

DTOH:

CALLDETOHE;

调用十进制转十六进制子程序

BTOS:

CALLINPUT;

大写字母改为小写

MOVCX,20;

作为循环条件

GAIXIEADD,NEXT1,'

A'

,'

Z'

,N1,N2;

宏GAIXIE展开

STOB:

小写字母改为大写

MOVCX,20

GAIXIESUB,NEXT2,'

a'

z'

,N3,N4

INPUTPROCNEAR;

输入字符串

MOVDX,0;

DX清零

MOVDX,OFFSETBUF1;

把BUF1的首地址给DX

MOVAH,10;

调用10号中断功能,输出字符串

把BF首地址给DX

LEASI,BUF1+2

MOVBL,[SI-1];

把输入的字符个数给BL

MOVBH,0;

BH清零

MOVBYTEPTR[BX+SI+1],'

把$作为字符串结束字符

LEADX,BUF1+2

RET;

INPUTENDP

HEXIDECPROCNEAR;

用该子程序把一个十六进制数转换成十进制数表示

PUSHDS;

保护初始数据段

SUBAX,AX;

AX清零

START1:

LEADX,BUF2

CALLHEXIBIN;

调用输入一个十六进制数子程序

CMPAL,1BH;

遇Esc则退出

JZEXIT1

换行

CALLBINIDEC

CALLCRLF

JMPSTART1;

EXIT1:

RET

HEXIDECENDP

HEXIBINPROCNEAR;

输入一个十六进制数,并存放在BX中

MOVBX,0;

把BX清零

作为输入四位的记数器

INHEX:

CMPDX,4;

把DX跟4比较

JNBHEXEND;

大于则跳转

输入数据

遇到Esc则退出

JZHEXEND

SUBAL,30H;

判断是否数字或字母?

否则跳出

JLHEXEND

CMPAL,10;

判断是否数字

JLADD_TO;

是则存放BX中

SUBAL,7;

把AL内容减7转为字母

判断是否小写字母(a~f)

JLHEXEND

CMPAL,16

小于则跳转

SUBAL,20H;

判断是否大写字母(A~F)

CMPAL,10

CMPAL,16

JGEHEXEND

ADD_TO:

MOVCL,4;

作为循环条件

SHLBX,CL;

BX乘以16

MOVAH,0

ADDBX,AX;

两数相加

INCDX;

DX加1

JMPINHEX

HEXEND:

HEXIBINENDP

BINIDECPROCNEAR;

用来把BX中十六进制转换到十进制

MOVCX,10000;

把10000给CX,作为万位的权

CALLDEC_DIV;

调用除权子程序

MOVCX,1000

CALLDEC_DIV

MOVCX,100

MOVCX,10

MOVCX,1

RET

BINIDECENDP

DEC_DIVPROCNEAR;

除以各位十进制的权

MOVAX,BX;

把BX内容给AX

DIVCX

MOVBX,DX

MOVDL,AL

ADDDL,30H;

转换为ASSII

MOVAH,2

DEC_DIVENDP

CRLFPROCNEAR;

LEADX,BF

CRLFENDP

BINARYPROCNEAR;

该子程序用来把十六制数转换为十六位二进制数表示

START2:

LEADX,BUF2

把DS压栈

PUSHAX

CALLHEXIBIN

CMPAL,1BH

JZEXIT2

CALLPRINT

JMPSTART2

EXIT2:

BINARYENDP

PRINTPROCNEAR;

把BX中的十六进制数转换成二进制

MOVCX,16D;

记数

ROT:

SHLBX,1D;

每移一位最高位变为CF

JCSET;

CF为1则跳到SET,否则输出0

MOVDL,30H

MOVAH,2

DECCX

JNZROT

SET:

MOVDL,31H;

输出1

PRINTENDP

DETOHEPROCNEAR;

用该子程序来把一个十进制数转换成十六进制表示

REPEAT:

LEADX,BUF4

PUSHDS

SUBAX,AX

CALLDECIBIN

JZEXIT3

CALLBINIHEX

JMPREPEAT

EXIT3:

DETOHEENDP

DECIBINPROCNEAR;

输入一个五位的十进制数

MOVBX,0

MOVCX,0

NEWCHAR:

CMPCX,5

JNBEXIT4

MOVAH,1

JZEXIT4

SUBAL,30H

JLEXIT4

CMPAL,9

JGEXIT4

CBW

INCCX

XCHGAX,BX

MOVDX,10

MULDX

ADDBX,AX

JMPNEWCHAR

EXIT4:

DECIBINENDP

BINIHEXPROCNEAR;

把BX中的十进制数转换成十六进制输出

MOVCH,4

ROTATE:

MOVCL,4

ROLBX,CL;

把BX中高四位移到低四位,放到AL中

MOVAL,BL

ANDAL,0FH

ADDAL,30H

CMPAL,3AH;

判断是否为数字

JLPRINTIT

ADDAL,7

PRINTIT:

MOVDL,AL

DECCH

JNZROTATE

BINIHEXENDP

BETOHEPROCNEAR;

用该子程序来把一个十六位二进制数转换成十六进制输出

START3:

LEADX,BUF5

CALLINBIN

JZEXIT5

JMPSTART3

EXIT5:

BETOHEENDP

INBINPROCNEAR;

输入十六二进制数

PUTIN:

CMPCX,16

JNBEXIT6

JZEXIT6

JLEXIT6

CMPAL,1

JGEXIT6

CBW

MOVDX,2

JMPPUTIN

EXIT6:

INBINENDP

CODEENDS

ENDSTART

四、测试结果

经过多次调试、修改,测试结果胜利通过,符合要求:

选择大写改小写功能:

输入字符串,字母全变成小写,其他字符不变,遇回车结束输入并执行

选择小写改大写功能:

输入字符串,字母全变成大写,其他字符不变,遇回车结束输入并执行

选择十六进制转换成二进制功能:

输入一个不大于四位的十六进制数,输出对应的二进制数,遇回车结束输入并执行

选择二进制转换成十六进制功能:

输入一个不大于十六位的二进制数,输出对应的十六进制数,遇回车结束输入并执行

选择十六进制转换成十进制功能:

输入一个不大于四位的十六进制数,输出对应的十进制数,遇回车结束输入并执行

选择十进制转换成十六进制功能:

输入一个不大于65535的十进制数,输出对应的十六进制数,遇回车结束输入并执行

五、设计体会

通过这次的课程设计,让我对汇编有了更进一步的认识,加强了我用汇编语言编程的能力。

汇编语言程序设计是一门很抽象的学科,学起来也比较乏味。

一开始学的时候感觉很难,也没什么兴趣。

但随着学习的推进,以及上机编程,逐渐感到轻松。

在这次课程设计中,让我更加熟悉了汇编语言的一些基本的指令;

掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制;

能够熟练的利用子程序和宏进行编程。

在设计过程中,不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;

在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT指令会改变AL的值,在编程时应注意这方面的问题。

在编写过程中,让我深刻的体会到了搞科学的严谨性。

有时一个逗号或者写错一个字母这样一点点小小的错误,就会产生十几个错误,导致调试的失败。

不管做什么事,都要认认真真,否则就会得不偿失了。

当设计一步步接近成功,每一个子程序的调试成功,都让自己感到喜悦,从中体会到了编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2