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 -


本文标签: 显示 子程序 课程设计