(汇编)键盘输入一个两位数的16进制,将其转换为10进制并显示

键盘输入一个两位数的16进制,将其转换为10进制并显示

主要思路:首先将16进制转为10进制数字存储在BX中,再将BX用字符存储在TEMP中,显示TEMP即可。
16进制转为10进制数字存储例子:
1.f ->15 将f字符变为数字15
2.255=15*16+15
10进制数字转换为字符存储:
用循环除10取余,将余数加30H变为字符
(原本想写一个四位数的16进制转为10进制的代码,但是在转为10进制数字存储时出现错误,也不知道怎么改,就写了这一个)
代码的运行结果,ff是输入的16进制,255是转换成10进制之后
代码的运行结果:ff是输入的16进制,255是转换成10进制(输入的16进制要小于ffh)

STACK   SEGMENT PARA STACK
S_AREA  DW      100H DUP(?)
STACK   ENDS
    
DATA    SEGMENT PARA
PROMPT  DB 'Please enter a hexadecimal number:',0DH,0AH,'$' 
PROMPT1 DB 'Input error!Please enter a hexadecimal number again:',0DH,0AH,'$'
TEMP   DB    3 DUP(?),'$' 	 
DATA    ENDS
  
CODE    SEGMENT PARA
        ASSUME  CS:CODE,DS:DATA,SS:STACK
     
MAIN    PROC    FAR
        MOV     AX,DATA
        MOV     DS,AX
        MOV     AX,STACK
        MOV     SS,AX
		CALL    HEXTODEC
   
EXIT:   MOV     AX,4C00H
        INT     21H
MAIN    ENDP

HEXTODEC PROC
        LEA DX,PROMPT
		MOV AH,09H
	    INT 21H
INTP:
        MOV BX,0   ;用于存放两位的16进制数 
        MOV CL,2 
INPUT:  
		MOV AH,1    ;从键盘取数 
		INT  21H 
		CMP AL,30H  ;<0? 
		JB  FAULT    
		CMP AL,39H  ;>9? 
		JA  AF       
		SUB AL,30H  ;字符1-9变为数字1-9
		JMP TONUM 
   AF:  
        AND AL,11011111B ;转换为大写字母  
		CMP AL,41H   ;<A? 
		JB  FAULT    		
		CMP AL,46H   ;>F吗? 
		JA  FAULT     
		SUB AL,37H   ;字符A-F变为数字10-15		
TONUM:  
        CMP CL,2
		JB  TWO
        MOV DH,16
		MUL DH
		JMP ADDITION
TWO:
		MOV DH,1
		MUL DH
ADDITION:
        ADD BX,AX 		
		DEC CL 
		JNZ INPUT
		JMP TODEC
FAULT:
        LEA DX,PROMPT1
		MOV AH,09H
	    INT 21H
	    JMP INTP
		
TODEC:
        MOV     CX,3
        MOV     AX,BX
        MOV     BX,10
        LEA     DI,TEMP+2
   
CHANGE:    MOV     DX,0
        DIV     BX                  ;AX/BX 相除之后:AX = 整数 ,DX = 余数  
        OR      DL,30H              ;将数字转换成字符
        MOV     BYTE PTR [DI],DL    ;BYTE PTR 表示[DI]处一个字节
        DEC     DI
        LOOP    CHANGE
		MOV     BYTE PTR [DI],3
        LEA     DX,TEMP
        MOV     AH,9
        INT     21H
		RET
HEXTODEC ENDP

CODE    ENDS
        END     MAIN

如有错误,欢迎指正!(有帮助的话,点个赞哟!)

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值