进制转换程序设计
十进制和二进制相互转化程序的设计书

十进制和二进制相互转化程序设计书需求分析随着技术的不断提高,进制转换向着简单化,规模化发展,而对于只能识别二进制0和1码的计算机来说,如何翻译成人类可以认识和编译的语言,和安全加密等给信息管理有关的信息随之增加。
在这种情况下单靠人工来处理这些信息不但显得大不从心,而且极容易出错。
因此,需要开发二进制与十进制互换系统,该系统可以实现由计算机代替人工执行一系列复杂而繁琐的操作,使得办公人员可以轻松快捷的完成进制转换的任务。
总结系统需求分为大体分为5个模块:首先第一个需要数据的信息输入,即输入数据的基本信息包括输入的进制选项,所输入的二进制位数,所输入的二进制数,所输入的十进制数和判断是否全1或全0五个模块。
第二个需求是判断数据进制选项信息,在信息和科技不断进步的今天,数据及时准确的更新成了任何一个系统的首要任务,本系统应时代所需设计了数制信息功能,包括对包括数据的进制,二进制数据的位数,十进制数据,进行进制转换计算。
第三个需求是所输入的二进制数据,数据的运行使用主要是解决向十进制转换第四个需求是所输入的十进制数据,数据运行使用主要是解决向二进制转换。
第五个需求是打印退出,在对系统进行操作后,退出系统。
1.1 数据需求分析本系统的主要数据进制转换的实现。
转换包括:二进制数向十进制数转换,十进制数向二进制数转换,判断是否为全0或全1,是否继续执行等。
1.2功能需求分析本程序功能为二进制和十进制的相互转换,二进制转十进制主要根据进制转换的根本方法,分别乘以2的次方得到十进制数;十进制转二进制主要根据“除2取余法”得到二进制数。
另外,本程序简单易懂,操作简便,给出引导说明,以及还出错处理,只需按照提示输入即可用。
本系统主要实现对二进制与十进制之间互换,需要实现以下几个方面的功能:(1)二进制转十进制:选择二进制向十进制转换,选择二进制位数,输入二进制数,进行数制转换,输出结果,判断是否继续。
(2)十进制转二进制:选择十进制向二进制转换,输入十进制数,进行数制转换,输出结果,判断是否继续。
16进制转10进制单片机程序

16进制转10进制单片机程序摘要:1.16 进制转10 进制简介2.单片机程序设计思路3.程序实现步骤4.程序代码及注释5.测试与验证正文:1.16 进制转10 进制简介在单片机编程中,我们经常需要将16 进制数转换为10 进制数。
16 进制数是一种基于16 的数制系统,它的基数为16,即每个位可以表示0-15。
而10 进制数是我们常用的十进制数制系统,基数为10,即每个位可以表示0-9。
将16 进制数转换为10 进制数,可以更好地理解和处理数据。
2.单片机程序设计思路设计一个单片机程序实现16 进制转10 进制,主要思路是将16 进制数拆分为各位,然后通过位运算将各位转换为10 进制数,最后将各位的10 进制数相加得到结果。
3.程序实现步骤首先,我们需要读取16 进制数。
然后,通过位运算将每个位转换为10 进制数。
这里我们使用位与运算(&)和位或运算(|),分别提取各位的值。
最后,将各位的10 进制数相加得到结果,并输出。
4.程序代码及注释以下是一个简单的16 进制转10 进制单片机程序代码:```c#include <reg52.h>#include <intrins.h>sbit HexData = P1^0; // 定义16 进制数输入端口sbit HexClock = P1^1; // 定义时钟输入端口void delay(unsigned int x)tttt{twhile (x--);}void main(){tunsigned char hex_num; // 存储16 进制数tint dec_num; // 存储10 进制数tint i;thex_num = 0; // 初始化16 进制数为0twhile (1)t{ttif (HexData == 0) // 当16 进制数输入端口为低电平时tt{tttdelay(10); // 等待一个时钟周期tttif (HexData == 0) // 再次确认16 进制数输入端口为低电平ttt{tttthex_num = hex_num * 16 + (HexClock == 0); // 累加输入的16 进制数ttttdelay(10); // 等待一个时钟周期ttt}tt}ttif (hex_num == 0xFF) // 当16 进制数溢出时,结束读取tt{tttbreak;tt}t}t// 将16 进制数转换为10 进制数tdec_num = 0;tfor (i = 0; i < 8; i++)t{ttdec_num = dec_num * 16 + (hex_num & 0x0F); // 提取各位的10 进制数tthex_num = hex_num >> 4; // 移位准备读取下一位t}t// 输出10 进制数tprintf("%d", dec_num);twhile (1); // 程序停在此处}```5.测试与验证将编写好的程序烧写到单片机,然后通过串口监视器或者示波器观察程序的运行结果。
进制转换器小程序的程序设计及代码示例

进制转换器小程序的程序设计及代码示例一、介绍进制转换器是一种常见的工具程序,它可以将不同进制的数字相互转换,例如将二进制转换为十进制,十进制转换为八进制等。
本文将会介绍进制转换器小程序的程序设计思路以及代码示例。
二、程序设计思路1. 用户界面设计:进制转换器小程序的用户界面应该简洁明了。
可以通过输入框让用户输入待转换的数字,再通过下拉列表或选项按钮让用户选择待转换的进制类型。
最后,通过一个文本框或文本标签来显示转换结果。
2. 进制转换算法:根据用户选择的进制类型,将输入的数字应用对应的转换算法进行转换。
常见的进制转换算法包括二进制转十进制、十进制转二进制、十进制转八进制、十进制转十六进制等。
3. 错误处理:在用户输入数字时,需要进行有效性检查,确保用户输入的内容符合要求。
若输入不合法,应给出相应的错误提示信息。
三、代码示例下面是一个简单的进制转换器小程序的代码示例,使用Python语言编写:```pythonfrom tkinter import *def convert():input_num = input_entry.get()input_base = base_var.get()try:if input_base == "二进制":output_num = str(int(input_num, 2))elif input_base == "八进制":output_num = str(int(input_num, 8))elif input_base == "十进制":output_num = str(int(input_num, 10))elif input_base == "十六进制":output_num = str(int(input_num, 16))output_label.configure(text="转换结果:" + output_num)except ValueError:output_label.configure(text="输入无效!请检查输入内容。
嵌入式C程序设计 进制转换(讲义)

进制转换一、知识点进制转换:1.进制分为:二进制、八进制、十进制、十六进制等。
2.二进制数转换成十进制数的方法:按权展开再相加。
例4321012210(10010.11)12020212020202(22.75)--=⨯+⨯+⨯+⨯+⨯+⨯+⨯=同理,若要将其他进制数转换成十进制数,只需将数()R N 按权展开再相加。
3.十进制数转换成二进制数的方法1)十进制整数转换成二进制整数:采用“除2取余倒记法”。
例:将十进制数157转换成二进制数。
2)十进制小数转换成二进制小数:采用“乘2取整正记法”。
例:将十进制数0.724转换成二进制小数。
4.二进制数与八进制数之间的转换 1)二进制数转换成八进制数。
例:228(10110001)(011,001,101)(261)==2)八进制数转换成进制数:采用“一位拆三位”,并去掉整数最高位的0。
例:822(315)(011,001,101)(11001101)== 5.二进制数与十六进制数之间的转换 1)二进制数转换成十六进制数例:2216(10111100010)(0101,1110,0010)(52)E ==2)十六进制数转换成二进制数:采用“一位拆四位”,并去掉整数最高位的0。
例:1622(83)(1000,1101,0011,1100)(1000110100111100)D C == 6.几种进制表的对照表:二、习题1.下列字符型常量的表示中,错误的是()。
A [[品牌]]B '5+3'C ' [x=y] 'D ["计算机"]答案:A【解析】字符型常量也称为字符串,其表示方法是用定界符半角单引号、双引号或方括号把字符串扩起来。
字符型常量的定界符必须成对匹配,不能一边用单引号一边用双引号,如果某种定界符本身也是字符串的内容,则需要用另一种定界符为该字符串定界。
A项,用两对方括号定界是错误的。
2.在C语言中,以下合法的字符常量是()A. "\n"B. 'ab'C. '\x43'D. '\084'答案:C【解析】A 有双引号,是字符串B 单引号里只能一个字符D \0表明是8进制,只能出现0--7的数字。
单片机实验二数制转换类程序设计

单片机实验二数制转换类程序设计【实验目的】1.了解数制转换的基本概念及原理。
2.掌握单片机对数制转换的程序设计方法。
【实验器材】1.STC89C52单片机实验箱2. Keil C51开发环境3.电源、连接线等【实验原理】数制转换是将一个数值在不同进制间互相转换的过程。
常见的进制包括二进制、八进制、十进制和十六进制。
在程序设计中,经常需要进行不同进制间的转换,例如从二进制转换为十进制、从十进制转换为十六进制等。
【程序设计】本实验设计一个数制转换类的程序,实现二进制、八进制、十进制和十六进制之间的转换。
基本思路:1.输入数字和当前进制。
2.根据当前进制将输入的数字转换为十进制。
3.根据目标进制将十进制数转换为目标进制并输出。
【程序示例】```#include <reg52.h>#include <stdio.h>//二进制转十进制int binaryToDecimal(char *binary)int length = 0;while (binary[length] != '\0')length++;}int decimal = 0;int base = 1;for (int i = length - 1; i >= 0; i--) if (binary[i] == '1')decimal += base;}base *= 2;}return decimal;//十进制转二进制void decimalToBinary(int decimal, char *binary) int index = 0;while (decimal > 0)binary[index++] = (decimal % 2 == 1) ? '1' : '0'; decimal /= 2;}binary[index] = '\0';//反转二进制字符串int i = 0;int j = index - 1;while (i < j)char temp = binary[i];binary[i] = binary[j];binary[j] = temp;i++;j--;}//十进制转八进制void decimalToOctal(int decimal, char *octal)int index = 0;while (decimal > 0)octal[index++] = (decimal % 8) + '0';decimal /= 8;}octal[index] = '\0';//反转八进制字符串int i = 0;int j = index - 1;while (i < j)char temp = octal[i];octal[i] = octal[j];octal[j] = temp;i++;j--;}//十进制转十六进制void decimalToHexadecimal(int decimal, char *hexadecimal)int index = 0;while (decimal > 0)int remainder = decimal % 16;if (remainder < 10)hexadecimal[index++] = remainder + '0';} elsehexadecimal[index++] = remainder - 10 + 'A'; }decimal /= 16;}hexadecimal[index] = '\0';//反转十六进制字符串int i = 0;int j = index - 1;while (i < j)char temp = hexadecimal[i];hexadecimal[i] = hexadecimal[j]; hexadecimal[j] = temp;i++;j--;}void maichar input[100];int currentBase; // 当前进制int targetBase; // 目标进制printf("请输入一个数字:");scanf("%s", input);printf("请输入当前进制:");scanf("%d", ¤tBase);printf("请输入目标进制:");scanf("%d", &targetBase);printf("转换结果为:");switch (currentBase)case 2://二进制转十进制int decimal = binaryToDecimal(input); //十进制转目标进制switch (targetBase)case 8:char octal[100];decimalToOctal(decimal, octal);printf("%s\n", octal);break;}case 10:printf("%d\n", decimal);break;}case 16:char hexadecimal[100]; decimalToHexadecimal(decimal, hexadecimal); printf("%s\n", hexadecimal);break;}}break;case 8://八进制转十进制decimal = atoi(input);//十进制转目标进制switch (targetBase)case 2:char binary[100];decimalToBinary(decimal, binary);printf("%s\n", binary);break;}case 10:printf("%d\n", decimal);break;}case 16:char hexadecimal[100]; decimalToHexadecimal(decimal, hexadecimal); printf("%s\n", hexadecimal);break;}}break;case 10://十进制转目标进制switch (targetBase)case 2:char binary[100];decimalToBinary(atoi(input), binary); printf("%s\n", binary);break;}case 8:char octal[100];decimalToOctal(atoi(input), octal); printf("%s\n", octal);break;}case 16:char hexadecimal[100];decimalToHexadecimal(atoi(input), hexadecimal); printf("%s\n", hexadecimal);break;}}break;case 16://十六进制转十进制decimal = atoi(input);//十进制转目标进制switch (targetBase)case 2:char binary[100];decimalToBinary(decimal, binary);printf("%s\n", binary);break;}case 8:char octal[100];decimalToOctal(decimal, octal);printf("%s\n", octal);break;}case 10:printf("%d\n", decimal);break;}}break;}```【实验结果】1.运行程序后,程序会提示输入一个数字、当前进制和目标进制。
课程设计报告--汇编程序设计(进制转换)

课程设计报告--汇编程序设计(进制转换)汇编语言课程设计报告:代码与数制之间的转换内容提要:本课程设计的主要内容是代码与数制之间的转换~程序的主要功能如下: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 程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.1 主程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.2 键盘输入子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.3 ASC码转16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃72.4.4 16进制转ASC进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃82.4.5 2,16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃82.4.6 2?16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃92.4.7 16?2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃92.4.8 2~10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃102.4.9 2?10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃102.4.10 10?2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃112.4.11 10~16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃112.4.12 10?16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃122.4.13 16?10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃12三、源程序及其注释〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃13四、课程设计体会〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃29五、参考文献〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃29- 2 -汇编语言课程设计报告:代码与数制之间的转换课程设计题目:代码与数制之间的转换一、前言1.1 课程设计的目的, 加深对汇编语言课程理论方面的理解, 通过编写一定规模和难度的程序,进行一次较全面的汇编编程训练,提高分析问题和解决问题的能力, 提高调试程序的能力1.2 代码与数制之间的转换程序的意义数制转换是计算机科学技术中最为基础的运算,在日常生活中,人们习惯性地使用十进制数进行计算。
python进制转换程序设计

python进制转换程序设计Python进制转换程序设计一、引言进制转换是计算机科学中的基本操作之一,而Python作为一门强大的编程语言,也提供了丰富的函数和方法来进行进制转换。
本文将介绍如何使用Python编写一个简单的进制转换程序,以及一些常用的进制转换方法。
二、程序设计1. 十进制转二进制要将十进制数转换为二进制数,可以使用Python内置函数bin()。
该函数将十进制数转换为以"0b"开头的二进制字符串。
例如,将十进制数10转换为二进制数,可以使用以下代码:```decimal_num = 10binary_num = bin(decimal_num)print(binary_num) # 输出:0b1010```2. 十进制转八进制要将十进制数转换为八进制数,可以使用Python内置函数oct()。
该函数将十进制数转换为以"0o"开头的八进制字符串。
例如,将十进制数15转换为八进制数,可以使用以下代码:```decimal_num = 15octal_num = oct(decimal_num)print(octal_num) # 输出:0o17```3. 十进制转十六进制要将十进制数转换为十六进制数,可以使用Python内置函数hex()。
该函数将十进制数转换为以"0x"开头的十六进制字符串。
例如,将十进制数255转换为十六进制数,可以使用以下代码:```decimal_num = 255hex_num = hex(decimal_num)print(hex_num) # 输出:0xff```4. 二进制转十进制要将二进制数转换为十进制数,可以使用Python内置函数int()。
该函数将字符串表示的二进制数转换为十进制数。
例如,将二进制数"1010"转换为十进制数,可以使用以下代码:```binary_num = "1010"decimal_num = int(binary_num, 2)print(decimal_num) # 输出:10```5. 八进制转十进制要将八进制数转换为十进制数,可以使用Python内置函数int()。
博途十进制转十六进制程序

博途十进制转十六进制程序在计算机科学中,进制转换是一项基本的操作。
常见的进制包括二进制、八进制、十进制和十六进制。
十六进制是一种常用的进制,尤其在计算机领域中应用广泛。
本文将介绍如何使用博途进行十进制转十六进制的程序设计。
一、什么是十进制和十六进制十进制是我们常用的进制,也称为“基数为10的进制”。
它由0-9这10个数字组成,每个位置上的数字表示该位置上的数乘以10的幂次方。
例如,123表示1乘以100加2乘以10加3乘以1。
十六进制是一种基数为16的进制。
它由0-9和A-F这16个字符组成,其中A表示10,B表示11,依次类推,F表示15。
每个位置上的数字表示该位置上的数乘以16的幂次方。
例如,1A3表示1乘以16的2次方加10乘以16的1次方加3乘以16的0次方。
二、十进制转十六进制的方法在计算机中,我们经常需要将十进制数转换为十六进制数。
为了完成这个转换,我们可以使用以下步骤:1. 将十进制数除以16,得到一个商和余数。
2. 将余数转换为十六进制的对应字符。
3. 将商作为新的十进制数,重复步骤1和2,直到商为0。
4. 将得到的十六进制字符按照从低位到高位的顺序排列,即可得到最终的十六进制数。
例如,我们想将十进制数201转换为十六进制数。
按照上述步骤,我们可以得到以下计算过程:201 ÷ 16 = 12 余 9,余数为9对应的十六进制字符为9。
12 ÷ 16 = 0 余 12,余数为12对应的十六进制字符为C。
因此,201的十六进制表示为C9。
三、博途十进制转十六进制程序设计博途是一款常用的工具,其中包含了十进制转十六进制的功能。
我们可以通过以下步骤使用博途进行转换:1. 打开博途软件,在主界面选择“数学”模块。
2. 在数学模块中,选择“进制转换”功能。
3. 在进制转换功能中,选择“十进制转十六进制”选项。
4. 输入需要转换的十进制数,点击“转换”按钮。
5. 程序将会自动将十进制数转换为十六进制数,并显示在结果框中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号:120610340505课程设计题目不同数制的数据相互转换程序的设计学院计算机科学与技术专业计算机科学与技术班级计算机0605班姓名余欢欢指导教师刘传文2009 年 1 月15 日附件2:课程设计任务书学生姓名:余欢欢专业班级:计算机0605班指导教师:刘传文工作单位:计算机科学与技术学院题目:初始条件:理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。
实践:计算机学院科学系实验中心提供计算机和软件平台。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)输入二进制,十六进制,十进制的无符号数,将它们转换成不同进制的形式,并且输出出来。
(2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。
(3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。
(4)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:在正文第一行写课程设计题目;1.需求说明(要求、功能简述)或问题描述;2.设计说明(简要的分析与概要设计);3.详细的算法描述;4.源程序与执行结果(含测试方法和测试结果);5.使用说明;6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该程序进一步改进扩展的设想)。
时间安排:设计时间一周:周1:查阅相关资料。
周2:系统分析,设计。
周3~4:编程并上机调试。
周5:撰写课程设计报告。
设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。
设计报告书收取时间:20周的星期五下午5:00之前。
指导教师签名: 2009年1月9日系主任(或责任教师)签名: 2009年1月 9日不同数制的数据相互转换程序的设计1.需求说明(要求、功能简述)或问题描述;这个课程设计的要求和就是通过一个较大型实用程序的设计与实现,综合运用所学知识,加深理解和掌握。
同时培养学生分析问题和解决问题的能力,以及自学能力。
这个程序首先要求选择一种数值转换的种类,例如我们可以选择二进制输入,十进制输出,这样就要求我们把输入的二进制转换成十进制。
由于按照我们要求的输入,输出,总共有6种情况。
所以我们不能一一写出来每个程序的执行过程,对于不同的情况我们只需要定义不同的输入函数和输出函数,根据不同的情况,调用不同的输入函数和输出函数,这样做是为了对于多进制的情况,这样能简化程序。
我定义了二进制输入,十进制输入,十六进制输入,二进制输出,十进制输出,十六进制输出,这样就能满足各种需要。
这个实验还涉及到各种跳转,各个寄存器之间的移动,特定的输入和输出。
调用01h的输入功能,结果在al中,调用02h的输出功能,输出得到是dl里面的内容。
提示信息的输出是用db来定义的,结束标志是$,同时我也定义了一个表,来应对各种不同的情况。
由于寄存器有限,所以我们有时会用到入栈和出栈,同时寄存器的运用要很有技巧,我也从这个实验中学到了很多东西,对于数值转换的原理也有了较为深刻的了解。
为了这个实验,我查阅及分析相关的参考资料。
确定功能和功能结构,数据结构,以及用户界面;对各功能模块进行准确的定义,对全局数据变量进行说明和定义;确定各功能模块的算法并画出相应的数据流图。
最后编程并上机调试,最终程序成功运行。
2.设计说明(简要的分析与概要设计);确定程序功能和功能结构,数据结构,以及用户界面;对各功能模块进行准确的定义,对全局数据变量进行说明和定义;确定各功能模块的原理及算法并画出相应的数据和程序流图。
实验的主要思路我会慢慢描述的。
首先输出一个选择窗口,有6种选择。
按照自己的要求选择,选择之后,就会调用相应的输入函数,必须输入相应进制的数进行处理,2进制数必须输入16位,16进制数输入4位,10进制数要求输入的必须小于2的16次方。
输入之后,程序就会处理输入数据,然后调用相应的输出函数,就会输出相应的数据。
输入函数,输出函数都是子函数。
他们都有自己的功能,不管有多少中进制,处理的过程都是一样的,这种方法能够重复使用相同功能的函数,不会出现代码的重复定义和使用。
3.详细的算法描述;MENU DB 'Please Input your Choice:',0dh,0ahdb '1: Bin -->Dec',0dh,0ahdb '2: Bin -->Hex',0dh,0ahdb '3: Dec -->Bin',0dh,0ahdb '4: Dec -->Hex',0dh,0ahdb '5: Hex -->Dec',0dh,0ahdb '6: Hex -->Bin',0dh,0ahdb '0: Exit. $',0dh,0ah以上是选择界面的输出信息,按照上面对应的进制转换进行选择。
mess1 db 'Please input a Bin number:$'mess2 db 'Please input a Dec number:$'mess3 db 'Please input a Hex number:$'mess4 db 'Output Bin is: $'mess5 db 'Output Dec is: $'mess6 db 'Output Hex is: $'这部分是为了帮我们的输入输出理解的句子,他们在适当的时候帮助我们理解。
LKS:LEA DX,MENUMOV AH,09HINT 21HMOV AH,01HINT 21HCMP AL,39HJBE LK1SUB AL,7LK1:AND AL,0FHLEA SI,TABLEMOV AH,0SHL AX,1ADD SI,AXJMP [SI]这部分是为了实现根据输入进行跳转,从而对应到正确的进制转换。
CRLF PROCMOV AH,02HMOV DL,0AHINT 21HMOV DL,0DHINT 21HRETCRLF ENDP这部分是实现回车换行的操作。
INBIN PROCLEA DX,MESS1MOV AH,09HINT 21HMOV BX,0INBL1:MOV AH,01HINT 21HCMP AL,0DHJZ INBEXITAND AL,01HSHL BX,1OR BL,ALJMP INBL1INBEXIT:RETINBIN END这是输入二进制的实现部分。
OUTBIN PROCLEA DX,MESS4MOV AH,09HINT 21HMOV CX,16OBL1:ROL BX,1MOV DL,BLAND DL,01HOR DL,30HMOV AH,02HINT 21HLOOP OBL1RETOUTBIN ENDP上面的部分是实现1进制输出的实现部分。
4.源程序与执行结果(含测试方法和测试结果);DATA SEGMENTMENU DB 'Please Input your Choice:',0dh,0ahdb '1: Bin -->Dec',0dh,0ahdb '2: Bin -->Hex',0dh,0ahdb '3: Dec -->Bin',0dh,0ahdb '4: Dec -->Hex',0dh,0ahdb '5: Hex -->Dec',0dh,0ahdb '6: Hex -->Bin',0dh,0ahdb '0: Exit. $',0dh,0ahmess1 db 'Please input a Bin number:$'mess2 db 'Please input a Dec number:$'mess3 db 'Please input a Hex number:$'mess4 db 'Output Bin is: $'mess5 db 'Output Dec is: $'mess6 db 'Output Hex is: $'TABLE DW L0,L1,L2,L3,L4,L5,L6DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLKS:LEA DX,MENUMOV AH,09HINT 21HMOV AH,01HINT 21HCMP AL,39HJBE LK1SUB AL,7LK1:AND AL,0FHLEA SI,TABLEMOV AH,0SHL AX,1ADD SI,AX JMP [SI]L1:CALL INBIN CALL CRLF CALL OUTDEC CALL CRLF JMP LKSL2:CALL INBIN CALL CRLF CALL OUTHEX CALL CRLF JMP LKSL3:CALL INDEC CALL CRLF CALL OUTBIN CALL CRLF JMP LKSL4:CALL INDEC CALL CRLF CALL OUTHEX CALL CRLF JMP LKSL5:CALL INHEX CALL CRLF CALL OUTDEC CALL CRLF JMP LKSL6:CALL INHEX CALL CRLF CALL OUTBIN CALL CRLF JMP LKSL0:RETMAIN ENDPCRLF PROCMOV AH,02H MOV DL,0AH INT 21HMOV DL,0DH INT 21HRETCRLF ENDPINBIN PROCLEA DX,MESS1MOV AH,09HINT 21HMOV BX,0INBL1:MOV AH,01HINT 21HCMP AL,0DHJZ INBEXITAND AL,01HSHL BX,1OR BL,ALJMP INBL1INBEXIT:RETINBIN ENDP二进制的输入:每次我们输入的数都放在al中,每次都将al和空的bl进行或运算,实际上就将我们输入的数据存到了bx中,之后左移一位,在输入数据,之后重复进行上面的步骤,这样就将我们所输入的数据存到了bx中。
INDEC PROCLEA DX,MESS2MOV AH,09HINT 21HMOV BX,0INDL1:MOV AH,01HINT 21HCMP AL,0DHJZ INDEXITSUB AL,30HCMP AL,9JBE INDL2SUB AL,7INDL2:MOV AH,0XCHG AX,BXMOV CX,10MUL CXADD BX,AXJMP INDL1INDEXIT:RETINDEC ENDP十进制的输入:通过ax和bx的配合使用,每次都将前一次输入的数据乘以10,在加上这一次的输入,就这样就形成了10进制的输入。