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

Ros ·
更新时间:2024-09-21
· 972 次阅读

键盘输入一个两位数的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 ;9? JA AF SUB AL,30H ;字符1-9变为数字1-9 JMP TONUM AF: AND AL,11011111B ;转换为大写字母 CMP AL,41H ;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

如有错误,欢迎指正!

做个废材继续可爱 原创文章 4获赞 4访问量 127 关注 私信 展开阅读全文
作者:做个废材继续可爱



输入 16进制 进制

需要 登录 后方可回复, 如果你还没有账号请 注册新账号