键盘连续输入十六进制数子程序,主程序call hex即可。数值结果以十进制得形式保存到bx中。
简单说一下思路:
用户并不能键盘输入具体数字,只能通过键盘输入0~a的ascii码。所以当数字是0~9时, 通过 sub al,30h这句将该数字由ascii码的值转化为十进制数的值;当数字是A~F时, 通过 sub al,37h这句将该数字由ascii码的值转化为十进制数的值(10~15);当数字是a~f时, 通过 sub al,57h这句将该数字由ascii码的值转化为十进制数的值(10~15).如果不是上述这些字符,说明输入有错,打印出错提示。
流程图如下:
代码如下:
data segment
Tip db 'Error,please retype!$'
data ends
hex proc near;十六进制
mov bx,0
input4:
mov ah,1
int 21h
cmp al,0dh
jz exit4;若是换行键表明输入完成
cmp al,30h
jb dk
cmp al,39h
ja compare1
jmp change1;转化为十进制数0-9
compare1:
cmp al,41h
jb dk
cmp al,46h
ja compare2
jmp change2;转化为A-F
compare2:
cmp al,61h
jb dk
cmp al,66h
ja dk
jmp change3;转化为a-f
change1:
sub al,30h
jmp ent
change2:
sub al,37h
jmp ent
change3:
sub al,57h
jmp ent
ent:
cbw
xchg ax,bx
mov cx,16
mul cx
xchg ax,bx
add bx,ax
jmp input4
dk:
call crlf
mov ah,9
lea dx,Tip;打印出错提示
int 21h
call crlf
mov bx,0
jmp input4
exit4:ret
hex endp;
crlf proc near
mov dl,0ah
mov ah,02
int 21h
ret
crlf endp