汇编语言程序设计课程设计.docx

上传人:b****8 文档编号:11312496 上传时间:2023-02-26 格式:DOCX 页数:22 大小:252.05KB
下载 相关 举报
汇编语言程序设计课程设计.docx_第1页
第1页 / 共22页
汇编语言程序设计课程设计.docx_第2页
第2页 / 共22页
汇编语言程序设计课程设计.docx_第3页
第3页 / 共22页
汇编语言程序设计课程设计.docx_第4页
第4页 / 共22页
汇编语言程序设计课程设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计课程设计.docx

《汇编语言程序设计课程设计.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计课程设计.docx(22页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计课程设计.docx

汇编语言程序设计课程设计

汇编语言程序设计课程设计

课程设计报告

(本科)

课程:

汇编语言程序设计

学号:

姓名:

班级:

教师:

时间:

2014.6.3~2014.6.19

计算机科学与技术系

设计名称:

代码转换程序:

1.实现十六进制和十进制的相互转换

2.实现八进制和十进制的相互转换

设计内容、目的与要求:

实验要求:

本次课程设计着重于理论与实践的相结合,运用所学知识,配合实践操作。

实现代码转换程序。

内容包括:

设计题目;原始条件及参数;要求完成的主要任务(如:

设计方案的选择与确定、设计计算、程序编制、说明书撰写等具体要求);时间安排等。

 

计划与进度安排:

1.首先明确设计要求和理论知识,了解各进制之间的转换关系。

2.将思路流程的进制转换表格画出,按照流程图完成设计。

3.参考资料和收集代码,对题目进行编写。

4.对程序进行调试和修改,在电脑上进行演示。

具体时间安排:

6月3日~6月12日:

完成设计思路并作出草稿;

完成程序的输入;

6月13日~6月16日:

完成对基本功能的修改并运行无误;

增加对开始的源程序的功能;

6月17日至6月19日:

修改并完成,提交验收;

 

设计过程、步骤:

系统流程图:

图1系统流程图

 

十进制转二进制DECibin

图2十进制到二进制转换流程

 

二进制转八进制binioct

图3二进制转八进制转换流程

八进制转二进制octbin

图4八进制转二进制转换流程

 

二进制转十进制binidec

图5二进制转十进制转换流程

同理,十六进制转换为十进制的流程与此类似。

实验结果与分析:

图6首先运行无错误

图7输入1号功能变换

图8输入2号功能变换数值

图9产生obj文件

图10输入2号功能实现数制转换

图11输入1号功能实现数制转换

设计体会与建议:

通过此次课程设计,我们获益匪浅,现总结如下:

(1)我了解到汇编语言是一种基于硬件的一种语言,它相对于之前学的C语言是低级的。

但是汇编语言有它最大的好处,就是运行汇编程序所占用的系统资源很小,这样的话,运行同样的程序,汇编语言的速度要大于C语言。

我也查阅过资料,在我们将来要学习的单片机中,C语言和汇编语言是我们所学的可以对单片机进行编程的语言。

(2)我还意识到计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令集供给用户使用,这组指令集就称为计算机的指令系统。

而指令是由操作码字段和操作数字段两部分组成。

操作码字段指示计算机所要执行的操作,而操作数字段则指出在指令执行操作的过程中所需要的操作数。

(1)汇编语言相对于我们之前学习的C语言是非常繁琐的。

它有很多操作码,并且其助记符也是很难记清楚的,实践过程中遇到了很多根部想不到的困难。

例如,我们自己的电脑不能运行MASM程序等问题。

这是程序兼容性存在问题,最后只好在虚拟机中运行。

所以,虽然我的课设题目不难,却花了我很长时间。

而且我们最后完成的程序没有很好地拓展性。

汇编语言不仅要求我们有严谨的逻辑系统,更要求有扎实的基础和记忆。

(2)我还意识到理论学习与实际操作实在是有很大差距。

在今后的课程学习中,(以上王康也提到了,将来需要学习单片机。

)汇编语言是必不可少的。

我会认真对待每一次实践机会,努力提高自己的上机操作能力,让自己的编程能力更上一层楼。

我还会继续学习汇编语言,在实践方面带来更大作用。

附录:

源代码

十进制与八进制相互转换的程序清单:

;DECIOCT

;十进制与八进制相互转换

;首先选择算法,1为八进制转十进制,2为十进制转八进制

;***************************

DECioctSEGMENT

ASSUMECS:

DECioct

;主程序部分。

mainPROCFAR

start:

MOVDL,3ah;显示提示附

MOVAH,2

INT21h

MOVAH,1;输入选择数字

INT21h

CMPAL,32h;数字为1时,执行八进制转十进制

JEREPEat2;数字为2时,执行十进制转八进制

REPEat1:

CALLoctbin;键盘输入八进制数转为二进制

CALLcrlf;回车并换行

CALLbinidec;二进制转十进制

CALLcrlf;回车并换行

JMPREPEat1;重复执行

REPEat2:

CALLDECibin;键盘输入十进制数转为二进制

CALLcrlf;回车并换行

CALLbinioct;二进制转八进制

CALLcrlf;回车并换行

JMPREPEat2;重复执行

mainENDP

;-----------------------------

;十进制转二进制

DECibinPROCNEAR

MOVBX,0;将BX清零

NEwchar2:

MOVAH,1

INT21h;21号中断输入

SUBAL,30h;ASCII转二进制

JLexit2;<0则跳转

CMPAL,9d;判断是否>9

JGexit2;如果大于则不是十进制数

CBW;字节转为字

XCHGAX,BX;交换寄存器

MOVCX,10d;把10放如CX

MULCX;AX扩大10倍

XCHGAX,BX;交换寄存器

ADDBX,AX;原数的10倍加上输入数

JMPNEwchar2;跳转输入

exit2:

RET

DECibinENDP

;---------------------------------------

;二进制转八进制

binioctPROCNEAR

MOVCL,2;移位数字2

ROLBL,CL;循环左移2位

MOVAL,BL;把输入的数送入AL

ANDAL,03h;将高六位屏蔽

ADDAL,30h;转换为ASCII

MOVDL,AL;输出AL

MOVAH,2

INT21h

MOVCH,2;剩余显示2位

rotate2:

MOVCL,3;移位数字3

ROLBL,CL;循环左移3位

MOVAL,BL;把输入的数送入AL

ANDAL,07h;将高五位屏蔽

ADDAL,30h;转换为ASCII

MOVDL,AL;输出AL

MOVAH,2

INT21h

DECCH;递减CH

JNZrotate2;CH不为0则跳转

RET

binioctENDP

;---------------------------------------

;八进制转二进制

octbinPROCNEAR

MOVBX,0;BX清零

NEwchar1:

MOVAH,1;输入数字

INT21h

SUBAL,30h;转换为二进制数

JLexit1

CMPAL,8d;如果<8则跳转

JLADD_to1

CMPAL,10h

JGEexit1

ADD_to1:

MOVCL,3;移位数字3

SHLBX,CL;左移3位

MOVAH,0;AH清0

ADDBX,AX;把新位移入数字

JMPNEwchar1;跳转继续输入

exit1:

RET

octbinENDP

;--------------------------------------

;二进制转十进制

binidecPROCNEAR

MOVCX,10000d;除数为10000

CALLDEC_div

MOVCX,1000d;除数为1000

CALLDEC_div

MOVCX,100d;除数为100

CALLDEC_div

MOVCX,10d;除数为10

CALLDEC_div

MOVCX,1d;除数为1

CALLDEC_div

RET

;---------------------------------------

;子程序

DEC_divPROCNEAR

MOVAX,BX;把二进制数移入AX

MOVDX,0;DX高八位清零

DIVCX;除数CX

MOVBX,DX;余数移入BX

MOVDL,AL;商移入DL

ADDDL,30h;转换为ASCII

MOVAH,2;输出十进制数位

INT21h

RET

DEC_divENDP

;---------------------------------------

binidecENDP

;---------------------------------------

;回车和换行。

crlfPROCNEAR

MOVDL,0dh;回车

MOVAH,2;输出

INT21h

MOVDL,0ah;换行

MOVAH,2;输出

INT21h

RET

crlfENDP

;----------------------------------------

DECioctENDS

;*****************************************

ENDstart

 

十六进制与十进制相互转换的程序清单:

;DECIOCT

;十进制与十六进制相互转换

;首先选择算法,1为十六进制转十进制,2为十进制转十六进制

;***************************

DECioctSEGMENT

ASSUMECS:

DECioct

;主程序部分。

mainPROCFAR

start:

MOVDL,3ah;显示提示附

MOVAH,2

INT21h

MOVAH,1;输入选择数字

INT21h

CMPAL,32h;数字为1时,执行十六进制转十进制

JEREPEat2;数字为2时,执行十进制转十六进制

REPEat1:

CALLoctbin;键盘输入十六进制数转为二进制

CALLcrlf;回车并换行

CALLbinidec;二进制转十进制

CALLcrlf;回车并换行

JMPREPEat1;重复执行

REPEat2:

CALLDECibin;键盘输入十进制数转为二进制

CALLcrlf;回车并换行

CALLbinioct;二进制转十六进制

CALLcrlf;回车并换行

JMPREPEat2;重复执行

mainENDP

;-----------------------------

;十进制转二进制

DECibinPROCNEAR

MOVBX,0;将BX清零

NEwchar2:

MOVAH,1

INT21h;21号中断输入

SUBAL,30h;ASCII转二进制

JLexit2;<0则跳转

CMPAL,9d;判断是否>9

JGexit2;如果大于则不是十进制数

CBW;字节转为字

XCHGAX,BX;交换寄存器

MOVCX,10d;把10放如CX

MULCX;AX扩大10倍

XCHGAX,BX;交换寄存器

ADDBX,AX;原数的10倍加上输入数

JMPNEwchar2;跳转输入

exit2:

RET

DECibinENDP

;---------------------------------------

;---------------------------------------

二进制转十六进制

Binioctprocnear

Movch,4

Rotate:

movcl,4

Rolbx,cl

Moval,bl

Andal,0fh

Addal,30h

Cmpal,3ah

jlprintit

Addal,7h

Printit:

Movdl,al

Movah,2

Int21h

Decch

Jnzrotate

Ret

Binioctendp

---------------------------------------

 

十六进制转为二进制

octbinPROCNEAR

MOVBX,0;BX清零

NEwchar1:

MOVAH,1;输入数字

INT21h

SUBAL,30h;转换为二进制数

JLexit1

CMPAL,16d;如果<8则跳转

JLADD_to1

CMPAL,10h

JGEexit1

ADD_to1:

MOVCL,4;移位数字3

SHLBX,CL;左移3位

MOVAH,0;AH清0

ADDBX,AX;把新位移入数字

JMPNEwchar1;跳转继续输入

exit1:

RET

octbinENDP

二进制转化为十进制

binidecPROCNEAR

MOVCX,10000d;除数为10000

CALLDEC_div

MOVCX,1000d;除数为1000

CALLDEC_div

MOVCX,100d;除数为100

CALLDEC_div

MOVCX,10d;除数为10

CALLDEC_div

MOVCX,1d;除数为1

CALLDEC_div

RET

;---------------------------------------

;子程序

DEC_divPROCNEAR

MOVAX,BX;把二进制数移入AX

MOVDX,0;DX高八位清零

DIVCX;除数CX

MOVBX,DX;余数移入BX

MOVDL,AL;商移入DL

ADDDL,30h;转换为ASCII

MOVAH,2;输出十进制数位

INT21h

RET

DEC_divENDP

;---------------------------------------

binidecENDP

;---------------------------------------

;回车和换行。

crlfPROCNEAR

MOVDL,0dh;回车

MOVAH,2;输出

INT21h

MOVDL,0ah;换行

MOVAH,2;输出

INT21h

RET

crlfENDP

;----------------------------------------

DECioctENDS

;*****************************************

ENDstart

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

当前位置:首页 > 高中教育 > 理化生

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

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