微机原理十六进制转十进制程序
微机原理与接口第二版(陈红卫版)参考答案及复习纲要
第一章1.将下列十进制数转换成二进制数。
(1)49 (2)49.75 (3)100 (4)100.8125解:(1)(49)10=(110001)2(2)(49.75)10=(110001.11)2(3)(100)10=(1100100)2(4)(100.8125)10=(1100100.1101)22.将下列十六进制数转换成二进制数和十进制数。
(1)FAH (2)78A2H (3)FFFFH (4)3CH解:(1)(FA)16=(11111010)2=(250)10(2)(78A2)16=(111100010100010)2=(30882)10(3)(FFFF)16=(1111111111111111)2=(65535)10(4)(3C)16=(111100)2=(60)103.将下列二进制数转换成十六进制数和八进制数。
(1)101101.11 (2)1111111 (3)1101001011.01 (4)10111101解:(1)(101101.11)2=(2D.C)16=(55.6)8(2)(1111111)2=(7F)16=(177)8(3)(1101001011.01)2=(34B.4)16=(1513.2)8(4)(10111101)2=(BD)16=(275)84.设机器字长为8位,写出下列各二进制数的原码、反码和补码。
(1)+1010101 (2)-1000000 (3)+1111111 (4)-1111111解:(1)原码:01010101;反码:01010101;补码:01010101。
(2)原码:11000000;反码:10111111;补码:11000000。
(3)原码:01111111;反码:01111111;补码:01111111。
(4)原码:11111111;反码:10000000;补码:10000001。
5.设下列四组为8位二进制补码表示的十六进制数,计算a+b和a-b,并判断其结果是否溢出。
微机原理-数码转换实验报告
微机原理-数码转换实验报告-CAL-FENGHAI.-(YICAI)-Company One1实验九数码转换一、实验目的1、掌握计算机常用数据编码之间的相互转换方法。
2、进一步熟悉DEBUG软件的使用方法。
二、实验内容1、ACSII码转换为非压缩型BCD码2、BCD码转换为二进制码3、十六进制数转换为ASCII码三、实验1、ACSII码转换为非压缩型BCD码DATA SEGMENT PARA 'DATA'DATA1 DB 8 DUP()DATA2 DB 8 DUP()DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,SEG DATA1MOV DS,AXMOV DX,DATAMOV AH,0AHINT 21HLEA SI,DATA1MOV CL,[SI+1]LEA DI,DATA2ADD SI, 2CHK: MOV AL,[SI+2]CMP AL, '0'JB L01CMP AL, '9'JA L01SUB AL,30HMOV BL,ALMOV [DI], BLINC SIINC DIDEC CXJNZ CHKL01: MOV BL, 0FFHLOOP CHKMOV AH,4CH INT 21H CODE ENDSEND START2、BCD码转换为二进制码DATA SEGMENTBCD DB 1,2,3,4,5A DWDATA ENDSSTACK SEGMENT PARA STACK''STACK''STAPN DW 50 DUP()STACK ENDSCODE SEGMENTMAIN PROC FARASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXCALL CONVERTMOV A,BXRETMAIN ENDPCONVERT PROC NEARPUSH SIPUSH CXPUSH AXMOV SI,4L1:MOV AL,BCD[SI]CBWXCHG AX, BXMOV CX,10DMUL CXXCHG AX,BXADD BX,AXDEC SIJNZ L1POP AXPOP CXPOP SIEXIT:MOV AH,4CH INT 21H CONVERT ENDP CODE ENDSEND START3、十六进制数转换为ASCII码DATA SEGMENTDATA1 DW 2010HDATA2 DB 4 DUP()DATA ENDSSTACKS SEGMENT PARA STACK 'STACK'STACKS ENDSCODES SEGMENTASSUME SS:STACKS,CS:CODESASSUME DS:DATASSTART: MOV AX, DATAMOV DS, AXLEA SI, DATA1MOV AX, [SI]MOV CL, 12SHR AX, CLMOV BL, ALCALL ASCMOV DATA2, BLCALL XSMOV AX, [SI]MOV CL, 8SHR AX, CLAND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+1, BLCALL XSMOV AX, [SI]MOV CL, 4SHR AX, CLAND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+2, BLCALL XSMOV AX, [SI]AND AX, 000FHMOV BL, ALCALL ASCMOV DATA2+3, BLCALL XSMOV AH, 4CHINT 21HASC PROCCMP BL, 0AH JC LPADD BL, 07H LP: ADD BL, 30H RETASC ENDPXS PROCMOV DL, BL MOV AH, 02H INT 21HRETXS ENDPCODE ENDSEND START4、六进制数转换为十进制DATAS SEGMENTSTRING1 DB 0DH,0AH,'$'STRING2 DB 0DH,0AH,'$'DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV DX,OFFSET STRING1MOV AH,9INT 21HMOV CL,10HMOV BX,0NEWCHAR:MOV AH,1INT 21HSUB AL,30HJB DISPCBWXCHG AX,BXMOV CH,0MUL CXXCHG AX,BXADD BX,AXJNC NEWCHARDISP:MOV DX,OFFSET STRING2MOV AH,9INT 21HMOV CX,10000AGAIN:MOV DX,0MOV AX,BXDIV CXMOV BX,DXMOV DL,ALADD DL,30HCMP DL,39HJLE NEXTADD DL,7H NEXT:MOV AH,2INT 21HMOV DX,0MOV AX,CXMOV CX,10DIV CXMOV CX,AXCMP CX,0JNZ AGAINMOV AH,4CH INT 21H CODES ENDS END START5、十进制转换成七段码DATA SEGMENTDATA1 DB 3,4TABLE DB 23H,56H,42H,75H,00H,24H,67H,39H,20H DATA2 DB 2 DUP()DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA ST: MOV DI, OFFSET BUFDAMOV CL, 80HMOV BX, OFFSET TABLE DISI: MOV BL, [DI+0]MOV AX, BXXLATMOV DX, PORTSEGOUT DX, ALMOV AL, CLMOV DX, PORTBITOUT DX, ALPUSH CXMOV CX, 30HDELAY: LOOP DELAYPOP CXCMP CL, 20HJZ QUITINC DISHR CL, 1JMP DISIQUITCODE ENDSEND ST。
c语言16进制转10进制代码
c语言16进制转10进制代码在计算机科学中,16进制数是一种常见的数值表示方式。
它使用16个数字来表示数值,包括0-9和A-F。
与10进制数相比,16进制数更加紧凑,因为它可以用更少的数字来表示相同的数值。
在本文中,我们将探讨如何使用C语言将16进制数转换为10进制数。
让我们来看一下16进制数的表示方式。
16进制数通常以0x开头,例如0x1A表示十进制数26。
在C语言中,我们可以使用“%x”格式说明符来打印16进制数。
例如,下面的代码将打印出16进制数0x1A:```#include <stdio.h>int main() {int num = 0x1A;printf("0x%x\n", num);return 0;}```输出结果为:```0x1a```现在,让我们来看一下如何将16进制数转换为10进制数。
我们可以使用以下公式:```decimal = (16的n次方 * 第n位的值) + (16的n-1次方 * 第n-1位的值) + ... + (16的0次方 * 第0位的值)```其中,n是16进制数的位数减1。
例如,对于16进制数0x1A,n 为1,因为它有两个位数。
因此,我们可以使用以下公式将其转换为10进制数:```decimal = (16的1次方 * 1) + (16的0次方 * 10) = 26```现在,让我们来看一下如何在C语言中实现这个公式。
我们可以使用以下代码:```#include <stdio.h>#include <math.h>int main() {int hex = 0x1A;int decimal = 0;int n = 0;while (hex > 0) {int digit = hex % 10;decimal += digit * pow(16, n);hex /= 10;n++;}printf("%d\n", decimal);return 0;}```在这个代码中,我们首先定义了一个16进制数hex和一个10进制数decimal。
微机原理及应用第1章预备知识
十六进制与十进制、二进制的相互转换 1)十六进制与十进制的相互转换与二进制与十进制
的相互转换类似;
十六进制转化为十进制:每一位乘上 16n 相加。
例如: 0F23H 3160 2161 F162
(3 32 15 256)10 (3875)10
十进制转化为十六进制: ①将十进制整数部分“除16取余”,直到商数为0 ②将十进制小数部分“乘16取整”,直到小数部分为0
(4 0.75)10 (4.75)10
2)十进制转换成二进制 方法:对十进制的整数部分和小数部分分别进行转换 a.对于十进制的整数部分,除2取余(直到商数=0) b.对于十进制的小数部分,乘2取整(直到小数部分
等于0为止)
例如, (301.625)10 (?)2 首先将整数 (301)10 部分转换为二进制,再将将小数 部分 (0.625)10 转换为二进制 。
(301.625)10 (100101101.101)2
4. 八进制记数法 用0、1、2、……、7这8个符号来表示。目前的计 算机很少采用八进制。
5. 十六进制记数法 十六进制中的16个符号分别是:0、1、……、9、
A、B、C、D、E、F。 A~F相当于10~15。 十六进制数一般在其后加字符‘H’来标记。 若以A~F开头,则应在前面加0,如0F3H。
任何二进制数均可表示成以 2n为因子的代数式的和.
例如: (10)2 0 20 1 21 (2)10
3. 二进制数与十进制数的相互转换 1)二进制转换成十进制 就是将二进制数中的每一位bn乘上相应的因子2n后, 再相加。
例如:
(100.Leabharlann 1)2 0 20 0 21 1 22 1 21 1 22
8421码就是BCD码中的一种,用4位二进制来表示一位 十进制数
汇编语言16进制到10进制转换
汇编语言16进制到10进制转换DEC2HEX SEGMENTxp DB 0HASSUME CS:DEC2HEXREPEAT:CALL DEC2BINCALL CRLFCALL BIN2HEXCALL CRLFJMP REPEATDEC2BIN PROC NEARXOR BX,BX ;bx=0NEWCHAR: MOV AH,1 ;输入指令,存放在alINT 21HSUB A L,30HJL EXIT ;小于,不是数字也不是字母CMP AL,9JG E222;大于9,为字母JMP E333;小于9,为数字E222: SUB A L,7H;将字母代表的值转化为10进制下的数值CMP AL,15JG EXIT;大于十五,则不是16进制数,退出.JMP E333;输入的是a到f,为16进制的数E333: CBW ;ah=0000 0000XCHG AX,BX ;ax=0000 0000 0000 0000 bx=0000 0000 0000 **** ;bx存放先输入的值,即高位.MOV CX,16;cx=0001 0000MUL CX ;cx*ax, dx放高16位, ax放低16位(把ax左移4位) ; ax,bx互换,把之前的高位左移到更高位XCHG AX,BX ;换回来,bx还是用来存放高位ADD BX,AXJMP NEWCHAREXIT: RETDEC2BIN ENDPBIN2HEX PROC NEARMOV CX,BX;存放的16进制的值给cxROTA TE:XOR DX,DX;dx=0000 0000 0000 0000 MOV AX,CX;MOV BX, 0AHDIV BX;dx取余,ax取整MOV CX,AX;取整的值给cxADD DL,30HPUSH DXINC XPAND CX,CXJNE ROTATEPRINTIT: POP DXDEC XPCMP DL,20HJE PRINTIT ; 这两句似乎没有用MOV AH,2INT 21HCMP XP,0JNE PRINTITRETBIN2HEX ENDPCRLF PROC NEARMOV DL,0DH;回车;MOV AH,2 ;输出字符,dlINT 21HMOV DL,0AH ;换行MOV AH,2INT 21HRETCRLF ENDP DEC2HEX ENDS END REPEAT。
微机原理重点
第一章 微型计算机基础
12.微型计算机的基本结构
微型计算机主要有微处理器或中央处理单元(CPU)、存储器 (RAM和ROM)、I/O接口、I/O设备及总线组成。
存储器(RAM和ROM)
微处理器或中央 处理单元(CPU)
专用总线插座
硬盘、光驱
总线插座或接口
I/O设备
第一章 微型计算机基础
13.中央处理器CPU或微处理器 中央处理器具有算术运算、逻辑运算和控制操作的功能, 是微型计算机的核心部分。它主要有3个基本部分组成。 (1)算术逻辑单元(ALU) (2)寄存器 用来存放操作数、中间结果以及反应运 算结果的状态标志位。 (3)控制器 控制器具有指挥整个系统操作的功能。 它按一定的顺序从存储器中读取指令,进行译码,在时钟 信号的控制下,发出一系列的操作命令,控制CPU以及整 个系统有条不紊地工作。
第一章 微型计算机基础
15.8086/8088的寄存器
8086/8088的寄存器如图所示。8086/8088的寄存器有8个通用寄存器、1个指令寄存器、 1个标志寄存器和4个段寄存器。
AX BX CX DX AH BH CH DH AL BL CL DL 累加器 基址寄存器 计数 3个控制标志位
(1)方向标志位DF (2)中断允许标志位IF IF=1,允许CPU响应外部可屏蔽中断;IF=0,则不允许。 (3)追踪标志位TF TF=1,微处理器每执行一条指令就自动地发生一个内部中断, 微处理器转去执行一个中断程序,因而微处理器单步执行程序,常用于程序程序的调 试,故又称为陷阱标志位;TF=0,CPU正常执行程序。
第一章 微型计算机基础
14.总线
(1)地址总线(AB)单向 负责传输数据的存储位置或I/O接口中的寄存器的一组信号线称为地址总 线。MCS-51单片机对外部扩展的地址总线是16位,用A15~A0表示,可寻址 的存储器单元或I/O端口为216=64K。80x86的地址总线为20位或32位,用 A19~A0或A31~A0表示,所以可寻址的内存储器单元为220=1M或232=4G;对 I/O端口是通过地址总线的低16位来寻址的,故可寻址I/O端口为64K。 (2)数据总线(DB)双向 负责传输数据的一组信号线称为数据总线。MCS-51单片机对外部扩展的 数据总线为8位,用D7~D0表示,即字长为8位。8086和80286的数据总线为 16位,用D15~D0表示。8088的数据总线为8位,用D7~D0表示,8088为准16 位微处理器。 (3)控制总线(CB)广义双向 在传输与交换数据时起管理控制作用的一组数据线称为控制总线。
16进制转化为10进制的方法
16进制转化为10进制的方法16进制转换为10进制的方法在计算机科学中,十进制(Decimal)和十六进制(Hexadecimal)是常见的数字系统。
在日常生活和计算机中,我们常使用十进制数字系统。
然而,在计算机科学和编程领域,十六进制也是非常重要的。
因此,了解如何将十六进制数转换为十进制数是非常有用的。
本文将详细介绍如何将16进制转换为10进制的方法,以及具体的步骤和示例。
一、理解十进制和十六进制在开始转换之前,我们首先需要了解十进制和十六进制之间的差异。
十进制是一种基于10个数字(0-9)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是10的幂(10^0, 10^1, 10^2, ...)。
例如,数字512的意思是5 * 10^2 + 1 * 10^1 + 2 * 10^0。
十六进制是一种基于16个数字(0-9, A-F)的数字系统。
它的位置权重递增,从右到左,每个位置上的权重是16的幂(16^0, 16^1, 16^2, ...)。
例如,十六进制数5A的意思是5 * 16^1 + 10 * 16^0。
二、将16进制转换为10进制的步骤下面是将16进制数转换为10进制数的步骤:步骤1:将16进制数的每个数字与其相应的权重相乘。
步骤2:将步骤1中的结果相加。
让我们通过一个示例来演示这个过程。
示例:将十六进制数3E7转换为十进制数。
步骤1:将16进制数的每个数字与其相应的权重相乘。
3E7 = 3 * 16^2 + E * 16^1 + 7 * 16^0步骤2:将步骤1中的结果相加。
3 * 16^2 + 14 * 16^1 + 7 * 16^0 = 768 + 224 + 7 = 999因此,十六进制数3E7等于十进制数999。
三、其他注意事项1. 当遇到十六进制数的字母A、B、C、D、E和F时,分别对应十进制数10、11、12、13、14和15。
例如,十六进制数4A2F转换为十进制数的步骤如下:4A2F = 4 * 16^3 + 10 * 16^2 + 2 * 16^1 + 15 * 16^0= 16384 + 40960 + 32 + 15= 573912. 使用计算器或编程语言来实现转换更加简便。
微机实验三-进制转换实验报告
计算机科学与技术系实验报告专业名称计算机科学与技术课程名称微机原理与接口技术项目名称进制转换实验班级学号姓名同组人员无实验日期 2016/06/28一、实验目的与要求1、熟悉二进制、十进制、十六进制转换规则。
2、熟悉算术运算指令及移位指令的运用。
二、实验逻辑原理图与分析(汇编—流程图)2.1 画实验逻辑原理图三、程序分析1、十进制转二进制(此处时代码,但是由于上传问题,学生可以自己添加)将存放转换后的二进制数值,并通过移位的方式将寄存器中的每一位转换成对应的字符显示出来就成了对应的二进制。
2、二进制转十进制(此处也是代码,只要把代码复制进去就行。
也可以私聊我,我分享代码给你们。
)用系统功能调用将上面程序除出来的每一位转换成字符输出到显示器上来,从而完成2进制向10进制的转黄。
四、实验数据和结果分析4.1 实验结果数据二进制转十进制实验结果: 00001111B=15D;十进制转二进制实验结果:27D=00011011B;十六进制转十进制的实验结果:0011H=17D4.2 结果数据分析二进制转十进制结果分析:((0*2+1)*2+1)*2+1)*2+1=15;十进制转二进制结果分析:该数在计算机是以二进制形式存储的,即0,1,每次输出时,根据最高位判断一下是1还是0;十六进制转十进制结果分析:(0*16+1)*16+1=17五、实验问题分析、思考题与小结在实验过程中,我们发现对于16位的10转2中,其高位会出错通过检测盘查发现,错误出在对于寄存器的界限上以及高低位的使用上有问题。
本次实验过程中,我们进一步了解的系统功能调用,如从键盘上输入字符以及从显示器上显示对应的字符。
了解了在汇编语言中如何实现子函数调用,利用call 指令调用对应的函数,从而减少程序的重复性以及方便程序的可读性。
在整体实验中熟悉了移位指令,算术指令以及堆栈相关的指令,对于这些指令的用法进一步了解了。
并通过在编写程序中出现的错误加深了自身的编程习惯。
微机原理实验二十六进制数转换为ASCII
微机原理实验二十六进制数转换为ASCII 实验目的:掌握十六进制数转换为ASCII码的方法。
实验原理:在计算机中,ASCII码是一种字符编码标准,用于将英文字符、数字和一些特殊字符进行编码。
每个字符都有一个唯一的ASCII码值。
在进行十六进制数转换为ASCII码时,需要将十六进制数每两个字符一组进行转换。
例如,十六进制数"48656C6C6F20576F726C64"可以转换为ASCII码"HelloWorld"。
实验器材:1.计算机2.编程软件(如C++、Python等)实验步骤:1.打开编程软件,创建一个新的工程或者脚本。
2.定义一个字符串变量或者字符数组来存储转换后的ASCII码。
3.将需要转换的十六进制数以字符串的形式输入到程序中,或者通过读取文件的方式获取十六进制数。
4.使用循环结构将每两个字符的十六进制数转换为十进制数。
5.将转换后的十进制数转换为对应的ASCII码,并添加到字符串变量或者字符数组中。
6.输出转换后的ASCII码。
示例代码(使用C++语言):```cpp#include <iostream>#include <string>int maistd::string hexStr = "48 65 6C 6C 6F 20 57 6F 72 6C 64"; std::string asciiStr;size_t pos = 0;std::string token;while ((pos = hexStr.find(' ')) != std::string::npos)token = hexStr.substr(0, pos);hexStr.erase(0, pos + 1);int decimal = std::stoi(token, nullptr, 16);char asciiChar = static_cast<char>(decimal);asciiStr += asciiChar;}std::cout << "转换后的ASCII码为:" << asciiStr << std::endl; return 0;```运行结果:```转换后的ASCII码为:Hello World```注意事项:1.十六进制数转换为ASCII码时,每两个字符一组进行转换。
c语言中十六进制转十进制
C语言中十六进制转十进制引言在计算机科学中,数字可以使用不同的进制来表示。
常见的进制包括二进制、八进制、十进制和十六进制。
C语言是一种通用的高级程序设计语言,它具备处理不同进制的能力。
本文将重点介绍如何将十六进制数转换为十进制数。
十六进制和十进制的概念在开始具体介绍之前,我们先来回顾一下十六进制和十进制的概念。
十六进制,顾名思义,是基于16的数字系统。
它包含的数字为0-9和A-F,其中A表示10,B表示11,以此类推,F表示15。
十进制则是我们日常生活中常用的数字系统。
它是基于10的数字系统,包含的数字为0-9。
为了更好地理解十六进制和十进制之间的转换关系,我们来看一个例子。
例子1:将十六进制数0x2A转换为十进制数。
- 首先,我们要知道A在十进制中的值是10。
- 接下来,我们将0x2A分解为两部分:0x和2A。
- 0x表示这是一个十六进制数。
- 2A是具体的十六进制数字。
- 进一步拆分2A,得到2和A。
- 使用十进制数相加的规则,我们可以将2A表示为2 * 16^1 + A * 16^0。
- 计算结果为2 * 16 + 10 * 1 = 32 + 10 = 42。
- 因此,0x2A在十进制中的值为42。
现在我们已经了解了基本概念和一个具体转换的过程,接下来我们将介绍在C语言中如何进行十六进制转十进制的操作。
C语言中十六进制转换的方法在C语言中,我们可以使用几种方法来将十六进制数转换为十进制数。
下面我们将逐一介绍这些方法。
方法一:使用%ld格式化字符串首先,我们可以使用C语言中的格式化字符串来实现转换。
#include <stdio.h>int main() {char hex[10]; // 存储十六进制数的字符串long dec; // 存储转换后的十进制数printf("请输入一个十六进制数:");scanf("%s", hex);dec = strtol(hex, NULL, 16);printf("转换为十进制数为:%ld\n", dec);return 0;}在这个示例中,我们首先声明了一个char类型的数组hex,用于存储用户输入的十六进制数。
c语言中十六进制转十进制
c语言中十六进制转十进制C语言中十六进制转十进制在C语言中,我们经常需要进行数据类型的转换,其中十六进制转十进制是一种常见的转换方式。
下面我们来介绍一下如何在C语言中进行十六进制转十进制的操作。
1. 十六进制数的表示方法在C语言中,十六进制数以0x开头,后面跟着十六进制数的表示。
例如,0x1F表示十进制数31,0x2A表示十进制数42。
2. 十六进制转十进制的方法十六进制转十进制的方法很简单,只需要将十六进制数的每一位乘以16的幂次方,然后将结果相加即可。
例如,0x1F转换为十进制数的过程如下:1 * 16^1 + 15 * 16^0 = 16 + 15 = 31同样地,0x2A转换为十进制数的过程如下:2 * 16^1 + 10 * 16^0 = 32 + 10 = 423. C语言中的十六进制转十进制函数在C语言中,可以使用标准库函数strtoul()将十六进制字符串转换为十进制数。
该函数的原型如下:unsigned long int strtoul(const char *str, char **endptr, int base);其中,str表示要转换的字符串,endptr表示转换结束的位置,base 表示要转换的进制数。
例如,将字符串"1F"转换为十进制数的代码如下:unsigned long int num = strtoul("1F", NULL, 16);同样地,将字符串"2A"转换为十进制数的代码如下:unsigned long int num = strtoul("2A", NULL, 16);4. 总结十六进制转十进制是C语言中常见的数据类型转换方式之一。
在C语言中,可以使用乘以16的幂次方的方法进行转换,也可以使用标准库函数strtoul()进行转换。
无论使用哪种方法,都需要注意数据类型的范围和精度问题,以避免出现错误的结果。
16进制怎么转换10进制?计算机进制转换方法汇总
16进制怎么转换10进制?计算机进制转换方法汇总导读:从小我们就开始学数学,数学就有涉及到进制知识,相信大家对于进制都不陌生吧!进制也就是进位制,是一种进位方法。
现在大家都有电脑,利用电脑自带的计算机进行进制转换是最简便的方法,下面是小编给大家总结的计算机进制转换方法。
进制介绍:计算机中常用的进制主要有:二进制、八进制、十六进制,学习计算机要对其有所了解。
2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。
字母不区分大小写。
各种进制之间的转换方法:一、二进制转换十进制例:二进制“1101100”1101100 ←二进制数6543210 ←排位方法例如二进制换算十进制的算法:1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20↑ ↑说明:2代表进制,后面的数是次方(从右往左数,以0开始)=64+32+0+8+4+0+0=108二、二进制换算八进制例:二进制的“10110111011”换八进制时,从右到左,三位一组,不够补0,即成了:010 110 111 011然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:010 = 2110 = 4+2 = 6111 = 4+2+1 = 7011 = 2+1 = 3结果为:2673三、二进制转换十六进制十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:0101 1011 1011运算为:0101 = 4+1 = 51011 = 8+2+1 = 11(由于10为A,所以11即B)1011 = 8+2+1 = 11(由于10为A,所以11即B)结果为:5BB四、二进制数转换为十进制数二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有一个二进制数:0110 0100,转换为10进制为:计算:0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100五、八进制数转换为十进制数八进制就是逢8进1。
微机原理课程设计_进制转换程序设计
课程设计任务书学生姓名:易杨专业班级:电信 0802 指导教师:曾刚工作单位:信息工程学院题目:进制转换程序设计初始条件:具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、程序实现二进制、十进制、十六进制之间的转换2、在命令提示下输入相应进制数,回车后进行转换3、输入错误时应声响报警并拒绝输入4、程序采用汇编语言在PC机上完成5、完成符合学校要求的设计说明书时间安排:一周,其中2天程序设计,2天程序调试,1天完成课程设计报告书及答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)1原理分析 (1)2程序设计流程 (3)2.1程序流程图 (3)2.2设计思路 (4)3程序设计 (5)3.1堆栈段数据段程序设计 (5)3.2主程序设计 (5)3.3输入二进制程序 (7)3.4输入十进制程序 (8)3.5输入十六进制程序 (8)3.6输出二进制程序 (9)3.7输出十进制程序 (9)3.8输出十六进制程序 (11)3.9回车键确定程序 (11)3.10报警程序 (12)4运行结果 (13)5心得体会 (15)参考文献 (16)摘要日常生活与实际应用中,往往需要计算机处理的信息是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。
但在计算机内部采用的是二进制计数制,这种进制表达方法对于人们研究分析是不那么方便的。
本次课程设计将通过所学的微机原理知识理论,用汇编语言编写程序,实现二进制、十进制与十六进制之间的相互转换,并在MF2KP软件上演示。
关键词:汇编程序进制转换MF2KP1 原理分析进位计数制是人们利用符号来计数的方法。
一种进位计数制包含一组数码符号和两个基本因素。
数码是用不同的数字符号来表示一种数制的数值,这些数字符号称为”数码”。
微机原理十六进制转十进制程序
微机原理十六进制转十进制程序1.方法一CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART:CALL HEXIBIN ;16-2CALL CRLF ;换行CALL BINIDEC ;2-10CALL CRLFJMP MAIN ;get next inputRETMAIN ENDPHEXIBIN PROC NEARMOV BX,0 ;clear BX for numberNEWCHAR:MOV AH,01H ;keyboard inputINT 21H ;call DOSSUB AL,30H ;ASCII to binaryJL EXIT ;jump if<0CMP AL,10D ;is it > 9dJL ADD_TO ;yes,so it's digit;not digit(0-9),may be letter(a to f)SUB AL,27H ;convert ASCII to binary CMP AL,0AH ;is it <0a hex?JL EXIT ;yes,not letterCMP AL,10H ;is it > 0f hex?JGE EXIT ;yes,not letter;is hex digit,add to number in BXADD_TO:MOV CL,4SHL BX,CLMOV AH,0ADD BX,AXJMP NEWCHAREXIT:RETHEXIBIN ENDPBINIDEC PROC NEARMOV CX,10000DCALL DEC_DIVMOV CX,1000DCALL DEC_DIVMOV CX,100DCALL DEC_DIVMOV CX,10DCALL DEC_DIVMOV CX,1DCALL DEC_DIVRETDEC_DIV PROC NEARMOV AX,BX ;number low half MOV DX,0 ;zero out high half DIV CXMOV BX,DX ;remainder into BX MOV DL,AL ;quotient into DL;print the contents of DL on screen ADD DL,30H ;convert to ASCII MOV AH,02HRETDEC_DIV ENDPBINIDEC ENDPCRLF PROC NEARMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HRETCRLF ENDPCODE ENDSEND START2.方法二data segmentm dw 10 dup(?)rec db 5 dup(?) ;记录因子MESSAGE5 DB 'Welcome to the system!',13,10,13,10DB 'The function of the program is changing H(16)numbers into D(10) numbers.',13,10DB 'Please enter the number....',13,10,13,10,'$'data endscode segmentmain proc farassume cs:code,ds:datastart:push dsmov ax,datamov bx,0LEA DX,MESSAGE5MOV AH,09HINT 21H ;输出提示语newchar: mov ah,1 ;键盘输入int 21hsub al,30hjl ini ; <0输出cmp al,10jl add_tosub al,27h ; ‘a’~‘f’cmp al,0ahjl ini ; <‘a’输出cmp al,10hjge ini ; >’f’输出add_to:mov cl,4shl bx,clmov ah,0add bx,axmov m,bxjmp newcharini:mov ax,mmov bx,10mov si,4change:mov dx,0div bxmov [rec+si],dldec sicmp ax,0ja changeoutput:inc simov dl,[rec+si] add dl,30h mov ah,02hint 21hcmp si,4jb outputmov dl,20hmov ah,02hint 21hexit:mov ah,4chint 21hmain endpcode endsend start。
【汇编】16进制转换成10进制(三种方法)
【汇编】16进制转换成10进制(三种⽅法)汇编语⾔程序:16进制转换成10进制(三种⽅法)1;天⽔浪客(Gouki Jiang) , 16进制to10进制例题 2007.5.182 STACK SEGMENT PARA STACK3 S_AREA DW 100H DUP(?)4 S_TOP EQU $-S_AREA5 STACK ENDS67 DATA SEGMENT PARA8 VALUE DW 0EB9AH ;0603149 RESULT DB 5 DUP(?),'$'10 DATA ENDS1112 CODE SEGMENT PARA13 ASSUME CS:CODE,DS:DATA,SS:STACK1415 MAIN PROC FAR16MOV AX,DATA17MOV DS,AX18MOV AX,STACK19MOV SS,AX20MOV SP,S_TOP21MOV CX,522MOV AX,VALUE23MOV BX,1024MOV DI,OFFSET RESULT+42526JYB:XOR DX,DX27DIV BX28OR DL,30H29MOV BYTE PTR [DI],DL30DEC DI31 LOOP JYB32MOV DX,OFFSET RESULT33MOV AH,934INT 21H3536EXIT:MOV AX,4C00H37INT 21H38 MAIN ENDP39 CODE ENDS40 END MAIN4142;---------------------------------------------4344;天⽔浪客(Gouki Jiang) , 16进制to10进制倒除 2007.5.1845 STACK SEGMENT PARA STACK46 DW 100H DUP(?)47 STACK ENDS4849 DATA SEGMENT PARA50 VALUE DW 0EB9AH ;06031451 DATA ENDS5253 CODE SEGMENT PARA54 ASSUME CS:CODE,DS:DATA,SS:STACK5556 MAIN PROC FAR57MOV AX,DATA58MOV DS,AX59MOV CX,560MOV AX,VALUE61MOV BX,106263JYB1:XOR DX,DX64DIV BX65OR DL,30H66PUSH DX67 LOOP JYB168MOV CX,569JYB2:POP DX70MOV AH,271INT 21H72 LOOP JYB273EXIT:MOV AX,4C00H74INT 21H75 MAIN ENDP76 CODE ENDS77 END MAIN78;-----------------------------------------------7980;天⽔浪客(Gouki Jiang) , 16进制to10进制顺除 2007.5.1881 STACK SEGMENT PARA STACK82 DW 100H DUP(?)83 STACK ENDS8485 DATA SEGMENT PARA86 VALUE DW 0EB9AH ;06031487 DIVISOR DW 10000,1000,100,10,188 DATA ENDS8990 CODE SEGMENT PARA91 ASSUME CS:CODE,DS:DATA,SS:STACK9293 MAIN PROC FAR94MOV AX,DATA95MOV DS,AX96MOV CX,597MOV AX,VALUE98MOV SI,OFFSET DIVISOR99100JYB:XOR DX,DX101DIV WORD PTR[SI]102PUSH DX103OR AL,30H104MOV DL,AL105MOV AH,2106INT 21H107INC SI108INC SI109POP AX110 LOOP JYB111112EXIT:MOV AX,4C00H113INT 21H114 MAIN ENDP115 CODE ENDS116 END MAIN117118;-------------------------------------。
十六进制转十进制快速算法
十六进制转十进制快速算法《十六进制转十进制快速算法》嘿,小伙伴们!今天我要给你们分享一个超级有趣又超级有用的东西,那就是十六进制转十进制的快速算法。
你们可能会想,这听起来好复杂呀,像一团乱麻似的。
其实呀,没那么可怕啦。
我先给你们说说十六进制是啥吧。
十六进制就像是一个有着特殊规则的数字小世界。
在我们平常熟悉的十进制里,满十就进一,对吧?可十六进制呢,是满十六才进一。
它有十六个基本的数字符号,0到9就和十进制里一样,可后面还有A、B、C、D、E、F这六个字母呢。
A就代表十进制里的10,B代表11,依次类推,F就代表15。
那怎么把十六进制数快速转成十进制数呢?我给你们举个例子,就像十六进制数1A。
我们可以这样来算哦。
先把十六进制数的每一位都单独拿出来看。
1A这个十六进制数,1在十位上,A 在个位上。
那我们先算个位上的A。
A是10嘛,它在个位上,就相当于10乘以16的0次方。
16的0次方是多少呢?哎呀,那就是1呀,就像任何数的0次方都是1一样。
所以A这一位转成十进制就是10乘以1,还是10呢。
再看十位上的1。
这个1就相当于1乘以16的1次方。
16的1次方就是16啦,那1乘以16就是16咯。
最后把这两位算出来的结果加起来,16加上10,等于26。
哇,十六进制的1A就这么快变成十进制的26啦。
我再举个长一点的例子,比如说十六进制的2C5。
我们还是一位一位来看哦。
先看个位上的5。
5乘以16的0次方,16的0次方是1,所以这一位就是5乘以1,还是5呢。
再看十位上的C。
C可是12呢,12乘以16的1次方。
16的1次方是16,12乘以16等于192。
最后看百位上的2。
2乘以16的2次方。
16的2次方就是16乘以16,等于256。
2乘以256等于512。
然后把这三个结果加起来,5加上192再加上512,等于709。
哈哈,十六进制的2C5就变成十进制的709啦。
我跟我的好朋友小明说这个算法的时候,他一开始还不信呢。
他说:“这能这么简单?你可别骗我。
十六进制转化为十进制的计算方法
十六进制转化为十进制的计算方法嘿,朋友们!今天咱来唠唠十六进制转化为十进制的计算方法。
这玩意儿啊,就像是一把神奇的钥匙,能打开数字世界里的另一扇门呢!你看啊,十六进制,它就像是一群有着特别代号的小伙伴,0、1、2、3、4、5、6、7、8、9 这几个咱都熟悉,可后面还有A、B、C、D、E、F 呢!它们每个都代表着特定的数值。
而十进制呢,就是咱平常最常用的那个记数方法啦。
那怎么把十六进制变成十进制呢?嘿嘿,其实不难啦!咱就把十六进制的每一位数字,都乘以 16 的相应次幂,然后再把这些结果加起来就行啦。
举个例子哈,比如说十六进制的 ABC,那咱先看 A,它在十六进制里代表 10 呀,那就是 10 乘以 16 的 2 次方;B 呢,代表 11,就是 11 乘以 16 的 1 次方;C 就是 12 啦,乘以 16 的 0 次方。
然后把这些结果加起来,这不就得到十进制的值了嘛!哎呀呀,是不是听着有点晕乎?别着急呀!就像咱学走路一样,一步一步来。
多练几遍,你就会发现,嘿,原来这么简单!就好像你突然找到了一把钥匙,能轻松打开那扇之前觉得很难开的门一样。
再比如说十六进制的 1F,1 就还是 1 啦,乘以 16 的 1 次方,F 可是 15 哦,乘以 16 的 0 次方,加起来不就知道十进制是多少了嘛。
这就像是搭积木一样,一块一块地往上堆,最后就搭成了漂亮的城堡。
十六进制转化为十进制也是这样,一点一点地去算,最后就能得到结果啦。
你想想,要是没有这个方法,那咱在数字的世界里得多迷茫啊!有了它,咱就能在数字的海洋里畅游啦,多有意思!所以啊,一定要好好掌握这个方法哦,这可是咱探索数字世界的重要工具呢!总之,十六进制转化为十进制其实并不难,只要你用心去学,多练习,肯定能学会的。
加油吧,朋友们!让我们一起在数字的世界里尽情玩耍!。
将键盘上输入的十六进制数转换成十进制数
将键盘上输入的十六进制数转换成十进制数,在屏幕上显示.已通过调试,运行OK.献给同样为微机原理的题目苦苦搜索的同学们~DA TA SEGMENT ;懒人,关于ERROR提示和输入提示和各处回车略NUM16 DB 16DB ?DB 8 DUP(?)N DB ?DA TA ENDS ;FROM 唐如!CODE SEGMENTMAIN PROC FARSTART: ASSUME CS:CODE,DS:DATAMOV AX,DATAMOV DS,AXLEA DX,NUM16MOV AX,0A00HINT 21HLEA SI,NUM16MOV CL,[SI+1] ;实际输入的位数N2: MOV AH,0 ;AH清0MOV N,CL ;当前N值转移给NMOV AL,[SI+2] ;依次一位一位取数CMP AL,'A' ;与下三行一起转为数值JB N1SUB AL,07HN1: SUB AL,30HCMP N,0 ;N为0时已全转为2进制JZ TEN ;跳转至二进制转十进制部分INC SI ;取数完后指针加一DEC N ;取数完后N减一MOV CL,N ;余下的数的位数入CL保存N3: CMP N,0 ;判断当前数的位数JZ N4 ;累乘完后当前数的二进制值保存在AXMOV DX,16MUL DXDEC NJMP N3N4: ADD BX,AX ;把各位的二进制值加起来放到BX JMP N2TEN: MOV AX,BX ;复制到AX,做除法MOV DX,0MOV CX,10000DIV CX ;AX存商,DX存16位余数CALL PLAY ;display one bit in decimal MOV CX,1000DIV CXCALL PLAY ;display one bit in decimal MOV CX,100DIV CXCALL PLAY ;display one bit in decimal MOV CX,10DIV CXCALL PLAY ;display one bit in decimalCALL PLAY ;display one bit in decimal MOV AH,4CHINT 21HPLAY PROC NEAR ;逐位显示XCHG AX,DXPUSH AX ;余数入栈保护ADD DL,30H ;十进制数转ASC码MOV AH,02HINT 21H ;显示POP AX ;余数入AX除MOV DX,0RETPLAY ENDPMAIN ENDPCODE ENDSEND START。
汇编语言进制转换之16进制转10进制
汇编语⾔进制转换之16进制转10进制 使⽤8086汇编,输⼊⼀个16进制的数,程序把该16进制数转换为相应的10进制数输出程序运⾏截图:要实现这样⼀个程序,思路可以是这样的: 1.由于我们读⼊的键盘输⼊是ASCII码表⽰的,且输⼊⼀个字符便得到⼀个ASCII码,如输⼊ab,程序中可以得到61h和62h。
现在的问题是怎么把这些输⼊的字符表⽰成⼀个完整的数。
对于这个问题,我们可以把每次输⼊的字符的ASCII码先转换为对应的数,0-9之间的数,根据ASCII码表发现可以⽤ ASCII码减30h 得到0-9对应的⼗六进制数值,对于a-b,⽤ASCII码减57h 得到a-b对应的⼗六进制数值。
2.得到这些对应的数值之后,要把它们按输⼊顺序组合起来,这⾥可以⽤移位运算来组合,如根据输⼊转换得 1、2两个⼗六进制数值,1的⼆进制表⽰为0001,2的⼆进制表⽰为0010,把0001左移4位得到00010000,加上0010,得到0001010,00010010表⽰的便是12h。
3.把输⼊转换为数值之后就准备要输出了,可采⽤除10法得到各个位上的数,如要输出110,先要把110转为 1、1、0 再把对应的数值加上30h转为ASCII码后输出,把110转换为 1、1、0,110除以10商为11,余数为0,此时余数作为个位上的数,得到个位为0;再⽤上⼀步的商11作为被除数除以10,得到商为10,余数为1,此时余数作为⼗位上的数,得到⼗位为1;重复上述步骤,商1作为被除数除以10,商0余1,得到百位为1,此时商等于0,算法结束。
DATAS SEGMENTbin dw 10 dup(?) ;存放⼆进制结果buf db 5 dup(?) ;存放⼗进制数各个数位上的数值如100,存放为 1,0,0msg1 db 'please input a hex number',13,10,'$'msg2 db 'the dec number:',13,10,'$'crlf db 13,10,'$' ;回车换⾏DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXmov bx,0 ;初始化bxLEA dx,msg1 ;输出提⽰字符串mov ah,9int 21hinput:mov ah,1 ;输⼊⼀个字符int 21hsub al,30h ;把al中的ascii码转换成数值jl initcmp al,10 ;输⼊的数在0-9之间跳转jl toBinsub al,27h ;再转换为a-fcmp al,0ah ;输⼊的字符⽐a⼩jl init ;结束输⼊cmp al,10h ;输⼊的字符⽐f⼤jge init ;结束输⼊toBin: ;转换为⼆进制,把输⼊组合成意义上的数值mov cl,4shl bx,cl ;bx左移4位mov ah,0add bx,ax ;把输⼊后并从ascii码转换来的值与bx相加mov bin,bx ;转换成⼆进制数后存到内存binjmp input ;继续输⼊init: ;初始化,准备转换mov ax,binmov bx,10mov si,4 ;循环四次,最⼤到万位toDec: ;转为各个数位上的数值,如100转换为1,0,0 百位为1...mov dx,0div bx ;除10法得到各个位上的数值mov [buf+si],dl ;余数为该位上的值,第⼀次循环为个位,第⼆次为⼗位...;存到内存中dec sicmp ax,0 ;商是否为0,为0算法结束ja toDeclea dx,crlf ;显⽰提⽰mov ah,9int 21hlea dx,msg2mov ah,9int 21houtput: ;输出内存中存放的各个数位上的数值inc simov dl,[buf+si]add dl,30h ;转为asciimov ah,2int 21hcmp si,4jb outputmov ah,1int 21hMOV AH,4CHINT 21HCODES ENDSEND START到此这篇关于汇编语⾔进制转换之16进制转10进制的⽂章就介绍到这了,更多相关汇编 16进制转10进制内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持! 。
16进制转换为10进制c 语言
16进制转换为10进制c 语言在计算机科学中,十进制和十六进制是两种常用的数制表示方法。
十进制是我们常用的十个数字(0-9)表示数值的方法,而十六进制则是使用0-9和A-F共16个字符来表示数值的方法。
在C语言中,我们可以使用一些简单的方法将十六进制数转换为十进制数。
我们需要了解一些基础知识。
在C语言中,我们可以使用`%d`格式化字符来表示十进制数,而使用`%x`格式化字符来表示十六进制数。
这两个格式化字符可以与`printf`函数一起使用,用于将数值输出到屏幕上。
要将十六进制数转换为十进制数,我们可以使用C语言中的`sscanf`函数。
`sscanf`函数可以从一个字符串中读取格式化输入,并将结果存储到相应的变量中。
我们可以将十六进制数作为一个字符串传递给`sscanf`函数,并使用`%x`格式化字符来读取该数值。
然后,我们可以将得到的结果存储在一个整型变量中,即得到了转换后的十进制数。
以下是一个示例代码,演示了如何将一个十六进制数转换为十进制数并输出到屏幕上:```c#include <stdio.h>int main() {char hex_string[] = "1A"; // 十六进制数的字符串表示int decimal_number; // 转换后的十进制数sscanf(hex_string, "%x", &decimal_number); // 将十六进制数转换为十进制数printf("The decimal number is: %d\n", decimal_number); // 输出转换后的十进制数return 0;}```在上面的代码中,我们首先定义了一个表示十六进制数的字符串`hex_string`,并且定义了一个整型变量`decimal_number`来存储转换后的十进制数。
然后,我们使用`sscanf`函数将`hex_string`中的十六进制数转换为十进制数,并将结果存储在`decimal_number`中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.方法一
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE
START:
CALL HEXIBIN ;16-2
CALL CRLF ;换行
CALL BINIDEC ;2-10
CALL CRLF
JMP MAIN ;get next input
RET
MAIN ENDP
HEXIBIN PROC NEAR
MOV BX,0 ;clear BX for number
NEWCHAR:
MOV AH,01H ;keyboard input
INT 21H ;call DOS
SUB AL,30H ;ASCII to binary
JL EXIT ;jump if<0
CMP AL,10D ;is it > 9d
JL ADD_TO ;yes,so it's digit
;not digit(0-9),may be letter(a to f)
SUB AL,27H ;convert ASCII to binary CMP AL,0AH ;is it <0a hex?
JL EXIT ;yes,not letter
CMP AL,10H ;is it > 0f hex?
JGE EXIT ;yes,not letter
;is hex digit,add to number in BX
ADD_TO:
MOV CL,4
SHL BX,CL
MOV AH,0
ADD BX,AX
JMP NEWCHAR
EXIT:
RET
HEXIBIN ENDP
BINIDEC PROC NEAR
MOV CX,10000D
CALL DEC_DIV
MOV CX,1000D
CALL DEC_DIV
MOV CX,100D
CALL DEC_DIV
MOV CX,10D
CALL DEC_DIV
MOV CX,1D
CALL DEC_DIV
RET
DEC_DIV PROC NEAR
MOV AX,BX ;number low half
MOV DX,0 ;zero out high half
DIV CX
MOV BX,DX ;remainder into BX
MOV DL,AL ;quotient into DL
;print the contents of DL on screen
ADD DL,30H ;convert to ASCII
MOV AH,02H
INT 21H
RET
DEC_DIV ENDP
BINIDEC ENDP
CRLF PROC NEAR
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
RET
CRLF ENDP
CODE ENDS
END START
2.方法二
data segment
m dw 10 dup(?)
rec db 5 dup(?) ;记录因子
MESSAGE5 DB 'Welcome to the system!',13,10,13,10
DB 'The function of the program is changing H(16)numbers into D(10) numbers.',13,10
DB 'Please enter the number....',13,10,13,10,'$'
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
mov ax,data
mov ds,ax
mov bx,0
LEA DX,MESSAGE5
MOV AH,09H
INT 21H ;输出提示语newchar: mov ah,1 ;键盘输入
int 21h
sub al,30h
jl ini ; <0输出
cmp al,10
jl add_to
sub al,27h ; ‘a’~‘f’
cmp al,0ah
jl ini ; <‘a’输出
cmp al,10h
jge ini ; >’f’输出
add_to:
mov cl,4
shl bx,cl
mov ah,0
add bx,ax
mov m,bx
jmp newchar
ini:
mov ax,m
mov bx,10
mov si,4
change:
mov dx,0
div bx
mov [rec+si],dl
dec si
cmp ax,0
ja change
output:
inc si
mov dl,[rec+si] add dl,30h
mov ah,02h
int 21h
cmp si,4
jb output
mov dl,20h
mov ah,02h
int 21h
exit:
mov ah,4ch
int 21h
main endp
code ends
end start。