汇编语言 十六进制转换为二进制

本文介绍了一个将十六进制数值转换为二进制表示的汇编语言程序。通过详细的代码注释和流程说明,展示了如何利用条件分支进行有效的数值转换。文章还分享了作者的编程心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天写了十六进制转换为二进制的汇编语言小程序,感觉挺有逻辑性的,运用条件分支,进行转换,这里把自己的心得分享一下,希望对大家有点小小的启示

由于,代码中已经有了详细注释,在这里我只是说出我写该程序的思路,首先得有一个流程图,比自己的想法用流程图表示出来,之后便可以照着流程图将自己的想法用汇编语言实现出来,在不懂得地方,只需要拿笔比划一下运行过程,想想程序怎么运行,我想会得到你想要的答案!!!(说明一下,如果输入错误程序直接结束,未返回提示信息!!!我自己蠢)

DATAS SEGMENT
    TIP DB 'INPUT THE NUMBER: ',0AH,0DH,'$'
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
   	
    MOV DX,OFFSET TIP ;输出提示输入数字标语
    MOV AH,09H
    INT 21H
    
    MOV CH,4 ;记录输入数字次数
    MOV CL,4 ;一次左移位数
    MOV BX,0 ;记录左移之后的数字
    MOV DH,16 ;输出十六位二进制数字控制
   
INPUT:
	MOV AH,1
	INT 21H
	;判断是否在0-9之间
	cmp AL,30H
	JB EXIT ;比0小则退出
	CMP AL,39H
	JA COMPER1 ;比9大则判断与A的大小
	;若进行到下一步则说明这次输入的是0-9之间的数字,转换成二进制
	JMP CHANGE1
COMPER1:
	CMP AL,41H ;判断与A的大小
	JB EXIT ;若小于A则退出
	CMP AL,46H ;判断与F的大小
	JA COMPER2 ;若比F大则判断与a的大小
	JMP CHANGE2 ;进行到这一步则说明输入的是A-F,转换成二进制
COMPER2:
	CMP AL,61H ;判断与a的大小
	JB EXIT ;小于a则退出
	CMP AL,66H ; 判断与f的大小
	JA EXIT ; 大于f则退出
	JMP CHANGE3 ; 进行到这一步说明输入的是a-f,转换成二进制

CHANGE1:
	SUB AL,30H ;转换成0-9
	SHL BX,CL ;左移四位 
	OR BL,AL ; 进行或运算得到四位二进制
	DEC CH ; 输入数字次数自减1
	JZ ENT ; 四位十六进制全部输入完毕则打印,否则继续输入
	JMP INPUT 
CHANGE2:
	SUB AL,37H ;此时AL中是A-F,减去37H是0AH,0BH...0FH
	SHL BX,CL
	OR BL,AL
	DEC CH
	JZ ENT
	JMP INPUT
CHANGE3:
	SUB AL,57H ;此时AL中是a-f,减去57H就是0AH,0BH...0FH
	SHL BX,CL
	OR BL,AL
	DEC CH
	JZ ENT
	JMP INPUT
;所有的CHANGE1,2,3道理都是一样的
ENT:
	MOV DL, 0DH ;0D是回车符的ASCII码.
	MOV AH, 02H ;输出单个字符.
	INT 21H ;输出.
	MOV DL, 0AH ;0A是换行符的ASCII码.
	MOV AH, 02H
	INT 21H 
	;这里0DH,和0AH要一起使用,单独使用会报错
	JMP PRINT
PRINT:
	SHL BX,1 
	JNC L1 ;判断进位,如果是0 跳到了L1
	MOV DL,'1' ;输出1
	MOV AH,02H
	INT 21H
	DEC DH
	JZ EXIT
	JMP PRINT
L1:
	MOV DL,'0' ;输出0
	MOV AH,02H
	INT 21H
	DEC DH 
	JZ EXIT
	JMP PRINT
EXIT:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

这里是运行的结果截图:
















评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值