admin 管理员组文章数量: 1086019
2024年12月22日发(作者:js最基本和最重要的是)
课程设计报告--汇编程序设计(进制转换)
汇编语言课程设计报告:代码与数制之间的转换 内容提要:
本课程设计的主要内容是代码与数制之间的转换~程序的主要功能如下:
1. 将十六进制数转换成其对应的ASCII码
2. 将ASCII码转换成其对应的十六进制数
3. 实现二进制数与十六进制数之间相互转换
4. 实现十进制数与二进制数之间相互转换
5. 实现十六进制数与十进制数之间相互转换
数制转换是计算机科学技术中最为基础的运算~在日常生活中~人们习惯性地
使用十进制数进行计算。而在计算机内部~所有的信息,数、字符、汉字、计算机
的指令、状态,都是用二进制数来表示的。在计算机中~二进制数的运算、处理比
十进制数的更容易实现。有时为了缩短书写~在计算机中还采用十六进制数。所以
~我们需要把数从二进制数形式转换成其他进制的形式~甚至在不同的进位制之间
进行转换。
- 1 -
汇编语言课程设计报告:代码与数制之间的转换
目录
一、 前言〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 1.1 程设计的目的〃〃〃〃〃〃
〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 1.2
代码与数制之间的转换程序的意义〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
3 1.3 数制之间的转换程序的主要功能〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃3
正文〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 二、
2.1 代码与数制之间相互转换程序的设计大纲〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃3 2.2 代码与数制之间相互转换程序的结构图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃4 2.3 友好交互界面结构图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃〃〃〃〃〃〃〃5 2.4 程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃6
2.4.1 主程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃〃〃〃〃〃6
2.4.2 键盘输入子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃〃6
2.4.3 ASC码转16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃7
2.4.4 16进制转ASC进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃8
2.4.5 2,16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃〃8
2.4.6 2?16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃9
2.4.7 16?2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃9
2.4.8 2~10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃〃10
2.4.9 2?10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃10
2.4.10 10?2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃11
2.4.11 10~16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃〃11
2.4.12 10?16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃
〃〃12
2.4.13 16?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=显示模式号,见表如下,
返回结果:无返回参数,只是屏幕设置为指定的模式。
模式号 分辨率 颜色 显示方式 0 40列*25行,下略, 16级灰色 黑白文本 1
40*25 16色 彩色文本 2 80*25 16级灰色 黑白文本 3 80*25 16色 彩色文本 7
80*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.3 ASC码转16进制子程序流程图
- 7 -
汇编语言课程设计报告:代码与数制之间的转换 2.4.4 16进制转ASC进制子程
序流程图
2.4.5 2,16进制子程序流程图
- 8 -
汇编语言课程设计报告:代码与数制之间的转换
2.4.6 2?16进制子程序流程图
2.4.7 16?2进制子程序流程图
- 9 -
汇编语言课程设计报告:代码与数制之间的转换
2.4.8 2,10进制子程序流程图
2.4.9 10?2进制子程序流程图
- 10 -
汇编语言课程设计报告:代码与数制之间的转换 2.4.10 2?10进制子程序流程
图
2.4.11 10,16进制子程序流程图
- 11 -
汇编语言课程设计报告:代码与数制之间的转换
2.4.12 10?16进制子程序流程图
2.4.13 16?10进制子程序流程图
- 12 -
汇编语言课程设计报告:代码与数制之间的转换 三、源代码及其注释
stack segment stack'stack'
stack ends
;*****************************数据段定义
********************************
data segment
string1 db'$------------ 计算机0502 20 36 -------$' ;窗口中的提示语
st1_len equ $-string1 ; 显示串的长度 st2 db'|--1.将十六进制数转换成对应
的ASC?码-----|' ;窗口中的提示语 st2_len equ $-st2 ; 显示串的长度 st3
db'|--2.将ASC?码转换成对应的十六进制数-----|' ;窗口中的提示语 st3_len
equ $-st3 ; 显示串的长度 st4 db'|--3.实现二进制数与十六进制数之间的转换-
-|' ;窗口中的提示语 st4_len equ $-st4 ; 显示串的长度 st5 db'|--4.实现二
进制数与十进制数之间的转换----|' ;窗口中的提示语 st5_len equ $-st5 ; 显
示串的长度 st6 db'|--5.实现十进制数与十六进制数之间的转换--|' ;窗口中的
提示语 st6_len equ $-st6 ; 显示串的长度 ST61 DB'请选择你所要进行的操作
(输入0-5):' ;
ST61_LEN EQU $-ST61
ST7 DB 20 DUP(?)
st0 db'|--0.退出本系统--------------------------|' ST0_LEN EQU $-ST0
ST8 DB'输入错误请重新输入:',13,10,'$'
buffer db 80 dup(?)
leap db 0ah,0dh,'$'
mesg1 db '1.实现2进制转成16进制',13,10
db '2.实现16进制转成2进制',13,10,'$'
mesg3 db '1.实现2进制转成10进制',13,10
db '2.实现10进制转成2进制',13,10,'$'
mesg5 db '1.实现10进制转成16进制',13,10
db '2.实现16进制转成10进制',13,10,'$' mesg6 db '请输入ASC?
码:',13,10,'$'
mesg7 db '请输入二进制数:',13,10,'$'
mesg8 db '请输入十进制数:',13,10,'$'
mesg9 db '请输入十六进制数:',13,10,'$'
mesg10 db '它的二进制数是:',13,10,'$'
mesg11 db '它的十进制数是:',13,10,'$'
mesg12 db '它的十六进制数是:',13,10,'$'
mesg13 db '它的ASC?码是:',13,10,'$'
data ends
code segment
- 13 -
汇编语言课程设计报告:代码与数制之间的转换
assume cs:code,ds:data,ss:stack
;******************主程序*********************************
begin proc far
mov ax,data ; 设置DS=ES
mov ds,ax
mov es,ax
PRINT: mov ah,0 ;设置显示模式3(彩色文本16色)
mov al,3
int 10h
mov ah,6 ;清屏
mov al,0
mov ch,0 ;屏幕左上角坐标
mov cl,0
mov dh,24 ;屏幕右下角坐标
mov dl,79
mov bh,07 ;属性
int 10h
;建立小窗口
mov ah,6
mov al,0
mov ch,0 ;左上角坐标
mov cl,0
mov dh,100 ;右下角坐标
mov dl,100
mov bh,20h ;绿底黑字,反向显示
int 10h
;在窗口第一行显示欢迎信息
mov ah,13h ;显示字符串
lea bp,string1 ;ES:BP=字符串首地址
mov cx,st1_len ;CX=串长度
mov dh,1 ;显示信息的起始行位置
mov dl,20 ;显示信息的起始列位置
mov bh,0
mov al,1
mov bl,64h ;显示的属性为棕底红字
int 10h
;显示提示信息0
;注释同显示第一行信息
mov ah,13h
lea bp,st0
mov cx,st0_len
mov dh,2
mov dl,20
- 14 -
汇编语言课程设计报告:代码与数制之间的转换
mov bh,0
mov al,1
mov bl,12h ;显示的属性为蓝底绿字
int 10h
;显示提示信息1
;注释同显示第一行信息
mov ah,13h
lea bp,st2
mov cx,st2_len
mov dh,3
mov dl,20
mov bh,0
mov al,1
mov bl,12h ;显示的属性为蓝底绿字
int 10h
;显示提示信息2
;注释同显示第一行信息
mov ah,13h
lea bp,st3
mov cx,st3_len
mov dh,4
mov dl,20
mov bh,0
mov al,1
mov bl,12h ;显示的属性为蓝底绿字
int 10h
;显示提示信息3
;注释同显示第一行信息
mov ah,13h
lea bp,st4
mov cx,st4_len
mov dh,5
mov dl,20
mov bh,0
mov al,1
mov bl,12h ;显示的属性为蓝底绿字
int 10h
;显示提示信息4
;注释同显示第一行信息
mov ah,13h
lea bp,st5
mov cx,st5_len
mov dh,6
mov dl,20
- 15 -
汇编语言课程设计报告:代码与数制之间的转换
mov bh,0
mov al,1
mov bl,12h ;显示的属性为蓝底绿字
int 10h
;显示提示信息5
;注释同显示第一行信息
mov ah,13h
lea bp,st6
mov cx,st6_len
mov dh,7
mov dl,20
mov bh,0
mov al,1
mov bl,12h ;显示的属性为蓝底绿字
int 10h
;显示所选操作提示信息
;注释同显示第一行信息
mov ah,13h
lea bp,st61
mov cx,st61_len
mov dh,8
mov dl,1
mov bh,0
mov al,1
mov bl,24h ;显示的属性为绿底红字
int 10h
CALL CRLF ;调用换行子程序,控制输出光标下移一行
CALL INPUT ;调用键盘输入子程序 ;判断键盘输入
repeat:mov dx,0
mov ah,1
int 21h
cmp al,30h ;为0跳至a0
JE a0
cmp al,31h ;为1跳至a1
JE a1
cmp al,32h ;为2跳至a2
JE a2
cmp al,33h ;为3跳至a3
JE a3
cmp al,34h ;为4跳至a4
JE a4
cmp al,35h ;为5跳至a5
- 16 -
汇编语言课程设计报告:代码与数制之间的转换
JE a5
lea dx,ST8 ;非0,1,2,3,4,5输出提示信息
mov ah,9 ;重新输入
int 21h
jmp repeat ;返回判断键盘输入
A0: JMP EXIT ;跳至exit
A1: CALL SIXASC ;调用SIXASC子程序,即十六进制转ASC码
CALL CRLF ;调用换行子程序,控制输出光标下移一行
JMP PRINT ;跳回清屏,显示小窗口
A2: CALL ASCIITO16;调用ASCIITO16子程序,即ASC码转十六进制
CALL CRLF ;调用换行子程序,控制输出光标下移一行
JMP PRINT ;跳回清屏,显示小窗口
A3: CALL TWOAND16; 调用TWOAND16子程序,即十六进制与二进制互转
CALL CRLF ;调用换行子程序,控制输出光标下移一行
JMP PRINT ;跳回清屏,显示小窗口
A4: CALL TWOAND10;调用TWOAND10子程序,即十进制与二进制互转
CALL CRLF ;调用换行子程序,控制输出光标下移一行
JMP PRINT ;跳回清屏,显示小窗口
A5: CALL TENAND16;调用TENAND16子程序,即十六进制与十进制互转
CALL CRLF ;调用换行子程序,控制输出光标下移一行
JMP PRINT ;跳回清屏,显示小窗口
;返回DOS
EXIT: mov ah,4ch
int 21h
RET
BEGIN ENDP
;********************键盘调用子程序***********************
INPUT PROC NEAR
L1: MOV AH,1 ;利用INT 16H的功能1探测读键盘
INT 16H
JZ L1 ;无键按下则循环
LEA SI,ST7
MOV CX,1
L2: MOV AH,0 ;利用INT 16H的功能0读键盘
INT 16H
;显示所输入的信息
- 17 -
汇编语言课程设计报告:代码与数制之间的转换
OUTPUT: mov ah,1
int 21h
RET
INPUT ENDP
;*******************ASC转16进制子程序******************************
ASCIITO16 PROC NEAR
xor ax,ax
mov bx,ax
lea dx,mesg6
mov ah,9
int 21h
ascii0: lea si,buffer
mov cx,2
ascii20: mov ah,01h
int 21h
cmp al,'p' ; 输入‘p’则返回主菜单
je quit0
cmp al,30h
jb error0 ; <0跳回重新输入
cmp al,39h
ja error0 ; >9跳回重新输入
and al,0fh
mov [si],al ; 取高位
inc si ; 取低位
loop ascii20
lea dx,leap ; 显示回车空行
mov ah,09h
int 21h
lea si,buffer
mov al,[si] ; 将高位的数存到al中
mov cl,4
shl al,cl ; 将高位的数移到高四位
inc si
add al,[si] ; 将高四位的数加低位
cmp al,30h
jb error0 ; <0跳回重新输入
cmp al,40h
jb logo ; <0跳回重新输入
cmp al,61h
jb error0
cmp al,66h
ja error0
logo: mov dl,al
mov ah,02h
- 18 -
汇编语言课程设计报告:代码与数制之间的转换
int 21h
lea dx, leap
mov ah,09h
int 21h
lea dx,mesg12
mov ah,9
int 21h
jmp ascii0
error0:
lea dx,mesg6
mov ah,9
int 21h
jmp ascii0
quit0: ret
ASCIITO16 ENDP
;******************16进制转ASC子程序*******************************
SIXASC PROC NEAR
xor ax,ax
lea dx,mesg9
mov ah,09h
int 21h
lea si,leap
ascii: mov ah,1
int 21h
cmp al,'p' ;输入
je quit
cmp al,30h ; <0跳回重新输入
jb error
cmp al,66h
ja error ; >f的跳回重新输入
cmp al,60h
ja print0 ; >a显示
cmp al,39h
ja error ; >9跳回重新输入 print0: push dx
push ax
mov buffer,al
mov dl,buffer
mov cl ,4
shr dl,cl
add dl,30h
mov ah,02h
- 19 -
汇编语言课程设计报告:代码与数制之间的转换
int 21h ;显示高位
mov dl,buffer
and dl,0fh
add dl,30h
mov ah,02h
int 21h
pop ax
pop dx ;显示低位
lea dx,leap
mov ah,09h
int 21h
jmp ascii
error: lea dx,st8
mov ah,09h
int 21h
jmp ascii ;跳回重新输入 quit: ret
SIXASC ENDP
;******************2,16进制子程序*******************************
TWOAND16 PROC NEAR
call crlf ;显示提示信息
lea dx,mesg1
mov ah,09h
int 21h
CALL INPUT ;调用键盘输入
repeat1: mov ah,1
int 21h
cmp al,31h ;比较输入,为1跳至B1
JE B1
cmp al,32h ;比较输入,为2跳至B2
JE B2
lea dx,ST8
mov ah,0
int 16h
jmp repeat1 ;调用2转16
B1: CALL CHANGE2TO16
RET
;调用16转2
B2: CALL CHANGE16TO2
RET
TWOAND16 ENDP
;******************2进制转16进制子程序
*******************************
CHANGE2TO16 PROC NEAR
- 20 -
汇编语言课程设计报告:代码与数制之间的转换
xor ax,ax
mov bx,ax
lea dx,mesg7 ;显示提示信息
mov ah,9
int 21h
mov si,4 newchar1: ;输入二进制数
mov ah,1
int 21h
sub al,30h ;将ACII变成十进制数值
jl rotate1
cmp al,10d ;和10进行比较
jl add_to1
jmp rotate1 add_to1: ;将二进制数存入bx中
mov cl,1
shl bx,cl
mov ah,0
add bx,ax
jmp newchar1 rotate1: ;控制光标并显示提示信息
CALL CRLF
lea dx,mesg12
mov ah,9
int 21h rotate1_1:
mov cl,4
rol bx,cl ;高位和低位对换
mov al,bl
and al,0fh
;转换成ASCII add al,30h
cmp al,3ah
jl print1
add al,7h print1: ;输出十六进制数
mov dl,al
mov ah,2
int 21h
dec si
jnz rotate1_1
mov ah,1 ;中断
int 21h
ret
- 21 -
汇编语言课程设计报告:代码与数制之间的转换
CHANGE2TO16 ENDP
;******************16进制转2进制子程序
*******************************
CHANGE16TO2 PROC NEAR
mov bx,0
lea dx,mesg9 ;显示提示信息
mov ah,9
int 21h
mov si,16 newchar2: ;输入十六进制数
mov ah,1
int 21h
sub al,30h
jl rotate2
cmp al,10d
jl add_to2
sub al,27h
cmp al,0ah
jl rotate2
cmp al,10h
jge rotate2 add_to2: ; 将十六进制数存入bx中
mov cl,4
shl bx,cl
mov ah,0
add bx,ax
jmp newchar2 rotate2: call crlf ;控制光标,并显示提示信息
lea dx,mesg10
mov ah,9
int 21h print2: ;输出二进制数
rol bx,1
mov al,bl
and al,1h
add al,30h
mov dl,al
mov ah,2
int 21h
dec si
jnz print2
mov ah,1 ;中断
int 21h
- 22 -
汇编语言课程设计报告:代码与数制之间的转换
ret
CHANGE16TO2 ENDP
;******************2,10进制子程序*******************************
;本部分说明类似2,16进制子程序,不重复说明 TWOAND10 PROC NEAR
call crlf
lea dx,mesg3
mov ah,09h
int 21h
CALL INPUT repeat2:
mov ah,1
int 21h
cmp al,31h
JE c1
cmp al,32h
JE c2
lea dx,ST8
mov ah,0
int 16h
jmp repeat2 ;2转10
C1: CALL CHANGE2TO10
RET
;10转2
C2: CALL CHANGE10TO2
RET
TWOAND10 ENDP
;******************2进制转10进制子程序
*******************************
CHANGE2TO10 PROC NEAR
lea dx,mesg7 ;显示提示信息
mov ah,9
int 21h
mov bx,0 newchar4: mov ah,1 ;输入二进制数
int 21h
sub al,30h
jl rotate4
cmp al,10d
jl add_to4
jmp rotate4 add_to4: mov cl,1 ;将十进制数存入bx中
shl bx,cl
mov ah,0
- 23 -
汇编语言课程设计报告:代码与数制之间的转换
add bx,ax
jmp newchar4 rotate4: call crlf ;控制光标,并提示信息
lea dx,mesg11
mov ah,9
int 21h ;输出十进制数
print4: mov cx,10000d ;显示万位
call dec_div4
mov cx,1000 ;显示千位
call dec_div4
mov cx,100 ;显示百位
call dec_div4
mov cx,10 ;显示十位
call dec_div4
mov cx,1 ;显示个位
call dec_div4
mov ah,1
int 21h
ret
CHANGE2TO10 ENDP
dec_div4 proc near ;除法子程序
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21h
ret
dec_div4 endp
;******************10进制转2进制子程序
*******************************
CHANGE10TO2 PROC NEAR
lea dx,mesg8 ;显示提示信息
mov ah,9
int 21h
mov bx,0
mov si,16 newchar3: ;输入十进制数
mov ah,1
int 21h
sub al,30h
- 24 -
汇编语言课程设计报告:代码与数制之间的转换
jl rotate3
cmp al,9d
jg rotate3
cbw
xchg ax,bx
mov cx ,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar3 rotate3: call crlf ;控制光标,并显示信息
lea dx,mesg10
mov ah,9
int 21h ;输出2进制数
print3: rol bx,1 ;循环左移一位
mov al,bl
and al,1h
add al,30h
mov dl,al
mov ah,2
int 21h
dec si
jnz print3
mov ah,1
int 21h
ret
CHANGE10TO2 ENDP
;******************10,16进制子程序*******************************
;本部分说明类似2,16进制子程序,不重复说明 TENAND16 PROC NEAR
call crlf
lea dx,mesg5
mov ah,09h
int 21h
CALL INPUT repeat3:
mov ah,1
int 21h
cmp al,31h
JE D1
cmp al,32h
JE D2
- 25 -
汇编语言课程设计报告:代码与数制之间的转换
lea dx,ST8
mov ah,0
int 16h
jmp repeat3 ;10转16
D1: CALL CHANGE10TO16
RET
;16转10
D2: CALL CHANGE16TO10
RET
TENAND16 ENDP
;******************10进制转16进制子程序
*******************************
CHANGE10TO16 PROC NEAR
lea dx,mesg8
mov ah,9
int 21h
mov bx,0
mov si,0 newchar6: mov ah,1 ;输入十进制数
int 21h
cmp al,'*' ;用'*'来判断输入数据是否结束
je next6
sub al,30h
jl next6
cmp al,9d ;和10进制9比较
jg next8
cbw
xchg ax,bx ; 将AX与BX内容交换
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar6 next6: mov si,1
next7: call crlf
lea dx,mesg12
mov ah,9
int 21h
mov ch,4
rotate6: mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
- 26 -
汇编语言课程设计报告:代码与数制之间的转换
cmp al,3ah
jl print6
add al,7h print6: mov dl,al ;输入十六进制数
mov ah,2
int 21h
dec ch
jnz rotate6
mov ah,1
int 21h
next8: ret
CHANGE10TO16 ENDP
;******************16进制转10进制子程序
*******************************
CHANGE16TO10 PROC NEAR
lea dx,mesg9
mov ah,9
int 21h
mov bx,0 newchar5: mov ah,1
int 21h
sub al,30h
jl next5
cmp al,10d
jl add_to5
sub al,27h
cmp al,0ah
jl next5
cmp al,10h
jge next5 add_to5:
mov cl,4
shl bx,cl ;将BX左移四位,低位移到高位
mov ah,0
add bx,ax
jmp newchar5 next5: call crlf
lea dx,mesg11
mov ah,9
int 21h
mov cx,10000d ;显示万位
call dec_div5
mov cx,1000d ;显示千位
call dec_div5
- 27 -
汇编语言课程设计报告:代码与数制之间的转换
mov cx,100d ;显示百位
call dec_div5
mov cx,10d ;显示十位
call dec_div5
mov cx,1d;显示个位
call dec_div5
mov ah,1
int 21h
ret
CHANGE16TO10 ENDP dec_div5 proc near ;除法子程序
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21h
ret
dec_div5 endp
;******************换行子程序*******************************
crlf proc near
mov dl,13
mov ah,2
int 21h
mov dl,10
mov ah,2
int 21h
ret
crlf endp
CODE ENDS
END BEGIN
- 28 -
汇编语言课程设计报告:代码与数制之间的转换 四、课程设计体会
经过一周的课程设计~无论从学习上还是自身角度~我都自认得到了很大的提
高。在课程设计过程中~发现许多在理论学习过程中所未发现的问题~同时~通过
自己的努力~顺利地解决了这些问题。这是一种磨砺。
这次的汇编课程设计为我们提供了与众不同的学习方法和学习机会~通过自学
BIOS中断等内容来完成课程设计~让我们从传统的被动授学转变为主动求学~从
死记硬背的模式中脱离出来~形成了在实践中学习~增强了领悟能力和解决问题的
能力。不仅可以巩固了以前所学过的知识~而且学到了很多在书本上所没有学到过
的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的~只有理论知
识是远远不够的~只有把所学的理论知识与实践相结合起来~从理论中得出结论~
才能真正为社会服务~从而提高自己的实际动手能力和独立思考的能力。
最后要感谢在此次课程设计中给与我帮助的所有人~同时感谢合作伙伴一起完
成此次设计。
五、参考文献
80x86汇编语言程序设计 马力妮主编 机械工业出版社 微机原理、汇编与接口
技术 朱定华主编 清华大学出版社 部分网络资料
- 29 -
版权声明:本文标题:课程设计报告--汇编程序设计(进制转换) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1734954810a1614124.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论