汇编--键盘输入十六进制数

键盘连续输入十六进制数子程序,主程序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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是实现该功能的 x86 汇编语言代码: ```assembly section .data input_msg db "请输入一个五位十进制:", 0 output_msg db "转换为十六进制为:", 0 section .bss num resw 1 section .text global _start _start: ; 输出提示信息 mov eax, 4 mov ebx, 1 mov ecx, input_msg mov edx, 26 int 0x80 ; 读取输入的十进制 mov eax, 3 mov ebx, 0 mov ecx, num mov edx, 5 int 0x80 ; 将输入的十进制转换为十六进制 mov eax, [num] mov ebx, 16 xor edx, edx div ebx push dx xor edx, edx div ebx push dx xor edx, edx div ebx push dx xor edx, edx div ebx push dx xor edx, edx div ebx push dx ; 输出转换后的十六进制 mov eax, 4 mov ebx, 1 mov ecx, output_msg mov edx, 28 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit1: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit2: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit3: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit4: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit5: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 上述代码使用了 Linux 下的系统调用来进行输入和输出操作。程序首先输出提示信息,然后读取输入的十进制。接下来,程序使用除法运算将输入的十进制转换为十六进制,并将每一位的值压入栈中。然后,程序从栈中弹出每一位的值,并将其转换为字符输出。最后,程序退出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值