将十六进制2C1D转换为二进制数9D2F转换成二进制数?

题目要求从键盘接收一个四位的十六进制数,将其转换成二进制数后输出,不考虑错误输入。运行截图编程平台Masm for Windows 集成实验环境 2012.5代码实现DATAS SEGMENT
data DW 0;存放输入的十六进制数
input DB 'Enter a four-digit hexadecimal number: $'
print DB 13,10,'Corresponding binary number: $'
DATAS ENDS
STACKS SEGMENT STACK
DB 200H DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC
MOV AX,DATAS
MOV DS,AX
LEA DX,input;输入提示
MOV AH,9H
INT 21H
;循环接收四个字符,一边接收一边整合到data变量中
LEA SI,data
MOV DI,4;输入的字符个数
l:
MOV AH,1H;输入一个字符
INT 21H
CALL SUBP1;将输入的字符转换成对应的十六进制数
MOV AH,0
MOV BX,AX;BX存放转换好的十六进制数
;将当前字符移动到正确位置
MOV AX,DI
DEC AX
CMP AX,0;判断是否需要移位
JE n
MOV CL,4
MUL CL
MOV CL,AL
SHL BX,CL
n:
ADD [SI],BX
DEC DI
CMP DI,0
JNE l
LEA DX,print;输出提示
MOV AH,9H
INT 21H
MOV BX,data
CALL SUBP2;用二进制形式输出数据
MOV AH,4CH
INT 21H
MAIN ENDP
;子程序
;功能:将输入的字符转换成对应的十六进制。
;入口参数:AL存放输入的字符。
SUBP1 PROC
;判断是否为数字
CMP AL,30H
JB stop
CMP AL,39H
JG upper
SUB AL,30H
JMP stop
;判断是否为大写字母(A-F)
upper:
CMP AL,41H
JB stop
CMP AL,46H
JG lower
SUB AL,37H
JMP stop
;判断是否为小写字母(a-f)
lower:
CMP AL,61H
JB stop
CMP AL,66H
JG stop
SUB AL,57H
stop:
RET
SUBP1 ENDP
;子程序
;功能:用二进制形式输出数据。
;入口参数:BX存放要转换的数据。
SUBP2 PROC
MOV CH,4;外循环次数,以循环得到每半个字节
MOV CL,4;移位次数
b:
ROL BX,CL
MOV AL,BL
AND AL,0FH;高4位置0,低4位保持不变
MOV DH,4;内循环次数,以循环得到每一位
bo:
ROL AL,1;每次循环移位一次,使AL的高4位依次单独存放其低4位中从左到右的每一位
MOV DL,AL
SHR DL,CL;使得DL中的高4位右移4位到低4位,并置高4位为0
ADD DL,30H
AND AX,0FH;AX低8位中的低4位保持不变,其他置0
PUSH AX;保存,因为下面会使AH和AL的值改变
MOV AH,2H
INT 21H
POP AX;恢复
DEC DH
CMP DH,0
JNE bo
MOV DL,' ';输出空格以便校对二进制数结果的正确性
MOV AH,2H
INT 21H
DEC CH
JNZ b
RET
SUBP2 ENDP
CODES ENDS
END MAIN
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!
今天来总结一下各种进制转换问题,详细齐全易于理解,希望对你有帮助哦!各种进制之间的相互转换先从我们最熟悉的十进制入手吧,其他进制与十进制的转换方法都是一样的。整型有4种进制形式:1.十进制: 都是以0-9这九个数字组成,不能以0开头。2.二进制: 由0和1两个数字组成。3.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。一、十进制转换为二进制、八进制、十六进制整数转换1、十进制转二进制(1)十进制转二进制的转换原理:除以2,反向取余数,直到商为0终止。(2)具体做法:将某个十进制数除2得到的整数部分保留,作为第二次除2时的被除数,得到的余数依次记下,重复上述步骤,直到整数部分为0就结束,将所有得到的余数最终逆序输出,则为该十进制对应的二进制数。例如:9(十进制)→1001(二进制)2、十进制转八进制(1)转换原理:除以8,反向取余数,直到商为0终止。(2)具体步骤与二进制一样例如:十进制数796转换成八进制数:将796除8取得第一个余数为4,将除8得到的整数部分99作为第二次的被除数,重复上述步骤,直至最终整数部分为0就结束。将取得的所有余数逆序输出则为:796–>14343、十进制转十六进制(1)转换原理:除以16,反向取余数,直到商为0终止。(2)具体步骤也和二进制、八进制一样,重复上述做法即可得到十六进制数。例如:十进制数796转换为十六进制数即为:796–>31c需要注意的是,十六进制数是由0-9和A-F(或者a-f)组成的,A相当于十进制中的10,B相当于11,依次类推,F相当与15,上述事例中取得的余数12即为十六进制中的c总结:以上几种进制的整数部分转换原理都是除进制数取余数,倒序输出再来贴一张小数部分进制表小数部分转换1、十进制转二进制(1)原理:十进制小数转换成二进制小数采用 “乘2取整,顺序输出” 法。例题: 0.68D = ______ B(精确到小数点后5位)如下所示,0.68乘以2,取整,然后再将小数乘以2,取整,直到达到题目要求精度。得到结果:0.10101B.例如:十进制小数0.68转换为二进制数具体步骤:0.68* 2=1.36 -->10.36* 2=0.72 -->00.72* 2=1.44 -->10.44* 2=0.88–>00.88* 2=1.76 -->1已经达到了题目要求的精度,最后将取出的整数部分顺序输出即可则为:0.68D–>0.10101B2、十进制转八进制(1)原理:十进制小数转换成八进制小数采用 “乘8取整,顺序输出” 法。(2)思路和十进制转二进制一样,参考如下例题:例题: 10.68D = ______ Q(精确到小数点后3位)解析:如下图所示,整数部分除以8取余数,直到无法整除。小数部分0.68乘以8,取整,然后再将小数乘以8,取整,直到达到题目要求精度。得到结果:12.534Q.例如:十进制数10.68转换成八进制数,分为整数部分和小数部分求解步骤:(1)整数部分10/8=1 -->21/8=0 -->1倒序输出为12(2)小数部分0.68* 8=5.44 -->50.44* 8=3.52 -->30.52* 8=4.16 -->4已经达到了题目要求的精度,即可结束则小数部分为:0.68–>0.534因此10.68D -->12.534Q3、十进制转十六进制(1)原理:十进制小数转换成十六进制小数采用 “乘16取整,顺序输出” 法。(2)思路也是一样的,就不重复了例题: 25.68D = ______ H(精确到小数点后3位)解析:如下图所示,整数部分除以16取余数,直到无法整除。小数部分0.68乘以16,取整,然后再将小数乘以16,取整,直到达到题目要求精度。得到结果:19.ae1H.(1)整数部分25/16=1 -->91/16=0 -->1倒序输出为:19(2)小数部分0.68* 16=10.88 -->a(即十进制中的10)0.88* 16=14.08 -->e0.08* 16=1.28 -->1已经达到了要求的精度,顺序输出为:ae1则:25.68D -->19.ae1H总结:小数部分转换原理都是乘进制数取整数部分,再将整数部分顺序输出。二、 二进制、八进制、十六进制转换为十进制整数转换1、全部总结如下:2、三者转换原理都是一样的例子说明:小数部分转换1、二进制转十进制(1)原理:整数部分按上述进行操作即可,小数部分从小数点后一位指数为-1开始算起,以后依次为-2、-3……(2)具体运用以及步骤举例说明:2、八进制转十进制(1)原理:整数部分操作以及运算不变,小数部分同二进制类似,将2改为8即可(2)具体步骤方法如下:例如:八进制数72.45转换成十进制数步骤:(1)整数部分:7* 8^1+ 2* 8 ^0=58(2)小数部分4* 8^(-1) + 5* 8^(-2)=0.5+0.078125=0.578125则为:72.45 -->58.5781253、十六进制转十进制(1)原理:整数运算一样,小数部分换成16即可(2)具体方法步骤如下:例:1A6.3B8=1* 16^2+A* 16 ^1+6* 16 ^0 +3* 16 ^(-1)+B* 16 ^(-2)+8* 16 ^(-3) =422.232422总结:以上二进制、八进制、十六进制转换为十进制当中的整数部分从右往左指数从0开始递增,小数部分从左往右从-1开始递减,原理都是一样的。例子说明:二进制数1010 0100B转换成八进制数为244Q二进制数1010 0100B转换成十六进制数为:a4H再来贴个例子:四、八进制、十六进制转换成二进制1、八进制数转换成二进制原理:八进制数的一位是二进制数的三位2、十六进制数转换成二进制原理:十六进制数的一位是二进制数的四位五、八进制与十六进制之间的转换这两者之间的转换可以借助十进制或者二进制完成,可以先将八进制转换成十进制或二进制,再转换成十六进制。通过间接转换来实现。本章内容到此结束啦,如果你想学习更多编程知识可以关注我不迷路不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员欢迎一起探讨!编程入门资料(网盘链接免费分享):

选择擅长的领域继续答题?
{@each tagList as item}
${item.tagName}
{@/each}
手机回答更方便,互动更有趣,下载APP
提交成功是否继续回答问题?
手机回答更方便,互动更有趣,下载APP
展开全部十六进制是由0-9和A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15。十六进制fd的F是15,D是13,换成十进制是253(13*16^0+15*16^1),再换为二进制的数是11111101(将十进制数除以二,得到的余数和商,商再除以二,依次类推直到商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零就行了)。已赞过已踩过你对这个回答的评价是?评论
收起
展开全部d相当于13,f相当于15,换十进制:13+15*16=?换成二进制:D是13,13=2^3+2^2+2^0,也就是1101同理15=2^3+2^2+2^1+2^0,也就是1111所以二进制是1111 1101
本回答被网友采纳
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
为你推荐:
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。说明
做任务开宝箱累计完成0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...

我要回帖

更多关于 将十六进制2C1D转换为二进制 的文章

 

随机推荐