课程设计报告汇编程序设计进制转换.docx
《课程设计报告汇编程序设计进制转换.docx》由会员分享,可在线阅读,更多相关《课程设计报告汇编程序设计进制转换.docx(37页珍藏版)》请在冰豆网上搜索。
课程设计报告汇编程序设计进制转换
课程设计报告--汇编程序设计(进制转换)
汇编语言课程设计报告:
代码与数制之间的转换内容提要:
本课程设计的主要内容是代码与数制之间的转换~程序的主要功能如下:
1.将十六进制数转换成其对应的ASCII码
2.将ASCII码转换成其对应的十六进制数
3.实现二进制数与十六进制数之间相互转换
4.实现十进制数与二进制数之间相互转换
5.实现十六进制数与十进制数之间相互转换
数制转换是计算机科学技术中最为基础的运算~在日常生活中~人们习惯性地使用十进制数进行计算。
而在计算机内部~所有的信息,数、字符、汉字、计算机的指令、状态,都是用二进制数来表示的。
在计算机中~二进制数的运算、处理比十进制数的更容易实现。
有时为了缩短书写~在计算机中还采用十六进制数。
所以~我们需要把数从二进制数形式转换成其他进制的形式~甚至在不同的进位制之间进行转换。
-1-
汇编语言课程设计报告:
代码与数制之间的转换
一、前言〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃31.1程设计的目的〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃31.2代码与数制之间的转换程序的意义〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃31.3数制之间的转换程序的主要功能〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3
正文〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3二、
2.1代码与数制之间相互转换程序的设计大纲〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃32.2代码与数制之间相互转换程序的结构图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃42.3友好交互界面结构图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃52.4程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃6
2.4.1主程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃6
2.4.2键盘输入子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃6
2.4.3ASC码转16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃7
2.4.416进制转ASC进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃8
2.4.52,16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃8
2.4.62?
16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃9
2.4.716?
2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃9
2.4.82~10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃10
2.4.92?
10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃10
2.4.1010?
2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃11
2.4.1110~16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃11
2.4.1210?
16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃12
2.4.1316?
10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃12
三、源程序及其注释〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃13
四、课程设计体会〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃29
五、参考文献〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃29
-2-
汇编语言课程设计报告:
代码与数制之间的转换
课程设计题目:
代码与数制之间的转换
一、前言
1.1课程设计的目的
加深对汇编语言课程理论方面的理解
通过编写一定规模和难度的程序,进行一次较全面的汇编编程训练,提高分
析问题和解决问题的能力
提高调试程序的能力
1.2代码与数制之间的转换程序的意义
数制转换是计算机科学技术中最为基础的运算,在日常生活中,人们习惯性地使用十进制数进行计算。
而在计算机内部,所有的信息,数、字符、汉字、计算机的指令、状态,都是用二进制数来表示的。
在计算机中,二进制数的运算、处理比十进制数的更容易实现。
有时为了缩短书写,在计算机中还采用十六进制数。
所以,我们需要把数从二进制数形式转换成其他进制的形式,甚至在不同的进位制之间进行转换。
1.3代码与数制之间的转换程序的主要功能
将十六进制数转换成其对应的ASCII码
将ASCII码转换成其对应的十六进制数
实现二进制数与十六进制数之间相互转换
实现十进制数与二进制数之间相互转换
实现十六进制数与十进制数之间相互转换
二、正文
2.1代码与数制之间相互转换程序的设计大纲
本程序主要要完成5大功能:
ASCII码与十六进制数之间的转换
二进制数与十六进制数之间的转换
十进制数与二进制数之间的转换
十进制数与十六进制数之间的转换
友好的交互界面
因此,本程序共需设计一个主程序以及若干个子程序
1.主程序:
主要实现友好的交互界面的设计,以及代码与数制之间相互转换的子程序
调用。
2.子程序:
完成各数制之间转换的具体功能实现
键盘输入子程序:
捕捉键盘输入并在屏幕上显示。
-3-
汇编语言课程设计报告:
代码与数制之间的转换,换行子程序:
控制输出时光标的位置,换行输出。
ASCII码转成十六进制数子程序:
实现ASCII码转成十六进制数。
十六进制数转成ASCII码子程序:
实现十六进制数转成ASCII码,二进制数与十六进制数相互转换子程序:
实现对二进制数转成十六进制数子程序和十六进制数转成二进制数子程序的调用。
二进制数转成十六进制数子程序:
实现二进制数转成十六进制数
十六进制数转成二进制数子程序:
实现十六进制数转成二进制数,二进制数与十进制数相互转换子程序:
实现对二进制数转成十进制数子程序和十进制数转成二进制数子程序的调用。
二进制数转成十进制数子程序:
实现二进制数转成十进制数
十进制数转成二进制数子程序:
实现十进制数转成二进制数,十进制数与十六进制数相互转换子程序:
实现对十进制数转成十六进制数子程序和十六进制数转成十进制数子程序的调用。
十进制数转成十六进制数子程序:
实现十进制数转成十六进制数
十六进制数转成十进制数子程序:
实现十六进制数转成十进制数
2.2代码与数制之间相互转换程序的结构图
-4-
汇编语言课程设计报告:
代码与数制之间的转换2.3友好交互界面结构图
界面设计用到的是BIOS功能的调用。
其中本程序所使用的功能调用如下:
AH=0:
设置显示模式。
输入参数:
AL=显示模式号,见表如下,
返回结果:
无返回参数,只是屏幕设置为指定的模式。
模式号分辨率颜色显示方式040列*25行,下略,16级灰色黑白文本140*2516色彩色文本280*2516级灰色黑白文本380*2516色彩色文本780*25单色黑白文本AH=6:
屏幕初始化或向上滚动。
输入参数:
AL=要滚动的行数,AL=0,全屏滚动,清屏,。
CH=滚动窗口左上角行号,CL,滚动窗口左上角列号DH=滚动窗口右下角行号,DL,滚动窗口右下角列号
BH=滚入行属性。
返回结果:
无。
AH=13H:
显示字符串。
输入参数:
ES:
BP=字符串首地址。
CX=串长度。
DH,DL=起始行列号。
BH=显示页号。
AL=0,BL=属性,光标保持在原处,串由字符组成,仅显示字符。
AL=1,BL=属性,光标到串尾,串由字符组成,仅显示字符。
AL=2,光标保持在原处,串由字符及属性组成。
AL=3,光标到串尾,串由字符及属性组成。
返回结果:
无。
界面如下:
-5-
汇编语言课程设计报告:
代码与数制之间的转换2.4程序流程图
2.4.1主程序流程图
2.4.2键盘输入子程序流程图
-6-
汇编语言课程设计报告:
代码与数制之间的转换
2.4.3ASC码转16进制子程序流程图
-7-
汇编语言课程设计报告:
代码与数制之间的转换2.4.416进制转ASC进制子程序流程图
2.4.52,16进制子程序流程图
-8-
汇编语言课程设计报告:
代码与数制之间的转换
2.4.62?
16进制子程序流程图
2.4.716?
2进制子程序流程图
-9-
汇编语言课程设计报告:
代码与数制之间的转换
2.4.82,10进制子程序流程图
2.4.910?
2进制子程序流程图
-10-
汇编语言课程设计报告:
代码与数制之间的转换2.4.102?
10进制子程序流程图
2.4.1110,16进制子程序流程图
-11-
汇编语言课程设计报告:
代码与数制之间的转换
2.4.1210?
16进制子程序流程图
2.4.1316?
10进制子程序流程图
-12-
汇编语言课程设计报告:
代码与数制之间的转换三、源代码及其注释
stacksegmentstack'stack'
stackends
;*****************************数据段定义********************************
datasegment
string1db'$------------计算机05022036-------$';窗口中的提示语st1_lenequ$-string1;显示串的长度st2db'|--1.将十六进制数转换成对应的ASC?
码-----|';窗口中的提示语st2_lenequ$-st2;显示串的长度st3db'|--2.将ASC?
码转换成对应的十六进制数-----|';窗口中的提示语st3_lenequ$-st3;显示串的长度st4db'|--3.实现二进制数与十六进制数之间的转换--|';窗口中的提示语st4_lenequ$-st4;显示串的长度st5db'|--4.实现二进制数与十进制数之间的转换----|';窗口中的提示语st5_lenequ$-st5;显示串的长度st6db'|--5.实现十进制数与十六进制数之间的转换--|';窗口中的提示语st6_lenequ$-st6;显示串的长度ST61DB'请选择你所要进行的操作(输入0-5):
';
ST61_LENEQU$-ST61
ST7DB20DUP(?
)
st0db'|--0.退出本系统--------------------------|'ST0_LENEQU$-ST0
ST8DB'输入错误请重新输入:
',13,10,'$'
bufferdb80dup(?
)
leapdb0ah,0dh,'$'
mesg1db'1.实现2进制转成16进制',13,10
db'2.实现16进制转成2进制',13,10,'$'
mesg3db'1.实现2进制转成10进制',13,10
db'2.实现10进制转成2进制',13,10,'$'
mesg5db'1.实现10进制转成16进制',13,10
db'2.实现16进制转成10进制',13,10,'$'mesg6db'请输入ASC?
码:
',13,10,'$'
mesg7db'请输入二进制数:
',13,10,'$'
mesg8db'请输入十进制数:
',13,10,'$'
mesg9db'请输入十六进制数:
',13,10,'$'
mesg10db'它的二进制数是:
',13,10,'$'
mesg11db'它的十进制数是:
',13,10,'$'
mesg12db'它的十六进制数是:
',13,10,'$'
mesg13db'它的ASC?
码是:
',13,10,'$'
dataends
codesegment
-13-
汇编语言课程设计报告:
代码与数制之间的转换
assumecs:
code,ds:
data,ss:
stack
;******************主程序*********************************
beginprocfar
movax,data;设置DS=ES
movds,ax
moves,ax
PRINT:
movah,0;设置显示模式3(彩色文本16色)
moval,3
int10h
movah,6;清屏
moval,0
movch,0;屏幕左上角坐标
movcl,0
movdh,24;屏幕右下角坐标
movdl,79
movbh,07;属性
int10h
;建立小窗口
movah,6
moval,0
movch,0;左上角坐标
movcl,0
movdh,100;右下角坐标
movdl,100
movbh,20h;绿底黑字,反向显示
int10h
;在窗口第一行显示欢迎信息
movah,13h;显示字符串
leabp,string1;ES:
BP=字符串首地址
movcx,st1_len;CX=串长度
movdh,1;显示信息的起始行位置
movdl,20;显示信息的起始列位置
movbh,0
moval,1
movbl,64h;显示的属性为棕底红字
int10h
;显示提示信息0
;注释同显示第一行信息
movah,13h
leabp,st0
movcx,st0_len
movdh,2
movdl,20
-14-
汇编语言课程设计报告:
代码与数制之间的转换
movbh,0
moval,1
movbl,12h;显示的属性为蓝底绿字
int10h
;显示提示信息1
;注释同显示第一行信息
movah,13h
leabp,st2
movcx,st2_len
movdh,3
movdl,20
movbh,0
moval,1
movbl,12h;显示的属性为蓝底绿字
int10h
;显示提示信息2
;注释同显示第一行信息
movah,13h
leabp,st3
movcx,st3_len
movdh,4
movdl,20
movbh,0
moval,1
movbl,12h;显示的属性为蓝底绿字
int10h
;显示提示信息3
;注释同显示第一行信息
movah,13h
leabp,st4
movcx,st4_len
movdh,5
movdl,20
movbh,0
moval,1
movbl,12h;显示的属性为蓝底绿字
int10h
;显示提示信息4
;注释同显示第一行信息
movah,13h
leabp,st5
movcx,st5_len
movdh,6
movdl,20
-15-
汇编语言课程设计报告:
代码与数制之间的转换
movbh,0
moval,1
movbl,12h;显示的属性为蓝底绿字
int10h
;显示提示信息5
;注释同显示第一行信息
movah,13h
leabp,st6
movcx,st6_len
movdh,7
movdl,20
movbh,0
moval,1
movbl,12h;显示的属性为蓝底绿字
int10h
;显示所选操作提示信息
;注释同显示第一行信息
movah,13h
leabp,st61
movcx,st61_len
movdh,8
movdl,1
movbh,0
moval,1
movbl,24h;显示的属性为绿底红字
int10h
CALLCRLF;调用换行子程序,控制输出光标下移一行
CALLINPUT;调用键盘输入子程序;判断键盘输入
repeat:
movdx,0
movah,1
int21h
cmpal,30h;为0跳至a0
JEa0
cmpal,31h;为1跳至a1
JEa1
cmpal,32h;为2跳至a2
JEa2
cmpal,33h;为3跳至a3
JEa3
cmpal,34h;为4跳至a4
JEa4
cmpal,35h;为5跳至a5
-16-
汇编语言课程设计报告:
代码与数制之间的转换
JEa5
leadx,ST8;非0,1,2,3,4,5输出提示信息
movah,9;重新输入
int21h
jmprepeat;返回判断键盘输入
A0:
JMPEXIT;跳至exit
A1:
CALLSIXASC;调用SIXASC子程序,即十六进制转ASC码
CALLCRLF;调用换行子程序,控制输出光标下移一行
JMPPRINT;跳回清屏,显示小窗口
A2:
CALLASCIITO16;调用ASCIITO16子程序,即ASC码转十六进制
CALLCRLF;调用换行子程序,控制输出光标下移一行
JMPPRINT;跳回清屏,显示小窗口
A3:
CALLTWOAND16;调用TWOAND16子程序,即十六进制与二进制互转
CALLCRLF;调用换行子程序,控制输出光标下移一行
JMPPRINT;跳回清屏,显示小窗口
A4:
CALLTWOAND10;调用TWOAND10子程序,即十进制与二进制互转
CALLCRLF;调用换行子程序,控制输出光标下移一行
JMPPRINT;跳回清屏,显示小窗口
A5:
CALLTENAND16;调用TENAND16子程序,即十六进制与十进制互转
CALLCRLF;调用换行子程序,控制输出光标下移一行
JMPPRINT;跳回清屏,显示小窗口
;返回DOS
EXIT:
movah,4ch
int21h
RET
BEGINENDP
;********************键盘调用子程序***********************
INPUTPROCNEAR
L1:
MOVAH,1;利用INT16H的功能1探测读键盘
INT16H
JZL1;无键按下则循环
LEASI,ST7
MOVCX,1
L2:
MOVAH,0;利用INT16H的功能0读键盘
INT16H
;显示所输入的信息
-17-
汇编语言课程设计报告:
代码与数制之间的转换
OUTPUT:
movah,1
int21h
RET
INPUTENDP
;*******************ASC转16进制子程序******************************
ASCIITO16PROCNEAR
xorax,ax
movbx,ax
leadx,mesg6
movah,9
int21h
ascii0:
leasi,buffer
movcx,2
ascii20:
movah,01h
int21h
cmpal,'p';输入‘p’则返回主菜单
jequit0
cmpal,30h
jberror0;<0跳回重新输入
cmpal,39h
jaerror0;>9跳回重新输入
andal,0fh
mov[si],al;取高位
incsi;取低位
loopascii20
leadx,leap;显示回车空行
movah,09h
int21h
leasi,buffer
moval,[si];将高位的数存到al中
movcl,4
shlal,cl;将高位的数移到高四位
incsi
addal,[si];将高四位的数加低位
cmpal,30h
jberror0;<0跳回重新输入
cmpal,40h
jblogo;<0跳回重新输入
cmpal,61h
jberror0
cmpal,66h
jaerror0
logo:
movdl,al
movah,02h
-18-
汇编语言课程设计报告:
代码与数制之间的转换
int21h
leadx,leap
movah,09h
int21h
leadx,mesg12
movah,9
int21h
jmpascii0
error0:
leadx,mesg6
movah,9
int21h
jmpascii0
quit0:
ret
ASCIITO16ENDP
;******************16进制转ASC子程序*******************************
SIXASCPROCNEAR
xorax,ax
leadx,mesg9
movah,09h
int21h
leasi,leap
ascii:
movah,1
int21h
cmpal,'p';输入
jequit
cmpal,30h;<0跳回重新输入
jberror
cmpal,66h
jaerror;>f的跳回重新输入
cmpal,60h
japrint0;>a显示
cmpal,39h
jaerror;>9跳回重新输入print0:
pushdx
pushax
movbuffer,al
movdl,buffer
movcl,4
shrdl,cl
adddl,30h
movah,02h
-19-
汇编语言课程设计报告:
代码与数制之间的转换
int21h;显示高位
movdl,buffer
anddl,0fh
adddl,30h
movah,02h
int21h
popax
popdx;显示低位
leadx,leap
movah,09h
int21h
jmpas