汇编语言进制转换之16进制转10进制

 更新时间:2020年07月21日 16:41:49   投稿:newname  
这篇文章主要介绍了汇编语言进制转换之16进制转10进制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

 使用8086汇编,输入一个16进制的数,程序把该16进制数转换为相应的10进制数输出

程序运行截图:

要实现这样一个程序,思路可以是这样的:

  1.由于我们读入的键盘输入是ASCII码表示的,且输入一个字符便得到一个ASCII码,如输入ab,程序中可以得到61h和62h。现在的问题是怎么把这些输入的字符表示成一个完整的数。对于这个问题,我们可以把每次输入的字符的ASCII码先转换为对应的数,0-9之间的数,根据ASCII码表发现可以用 ASCII码减30h 得到0-9对应的十六进制数值,对于a-b,用ASCII码减57h 得到a-b对应的十六进制数值。

  2.得到这些对应的数值之后,要把它们按输入顺序组合起来,这里可以用移位运算来组合,如根据输入转换得 1、2两个十六进制数值,1的二进制表示为0001,2的二进制表示为0010,把0001左移4位得到00010000,加上0010,得到0001010,00010010表示的便是12h。

  3.把输入转换为数值之后就准备要输出了,可采用除10法得到各个位上的数,如要输出110,先要把110转为 1、1、0 再把对应的数值加上30h转为ASCII码后输出,把110转换为 1、1、0,110除以10商为11,余数为0,此时余数作为个位上的数,得到个位为0;再用上一步的商11作为被除数除以10,得到商为10,余数为1,此时余数作为十位上的数,得到十位为1;重复上述步骤,商1作为被除数除以10,商0余1,得到百位为1,此时商等于0,算法结束。

DATAS SEGMENT
  bin dw 10 dup(?)  ;存放二进制结果
  buf db 5 dup(?)   ;存放十进制数 各个数位上的数值 如100,存放为 1,0,0
  msg1 db 'please input a hex number',13,10,'$'
  msg2 db 'the dec number:',13,10,'$'
  crlf db 13,10,'$'  ;回车换行
DATAS ENDS

CODES SEGMENT
  ASSUME CS:CODES,DS:DATAS
START:
  MOV AX,DATAS
  MOV DS,AX
  
    mov bx,0    ;初始化bx
    
    LEA dx,msg1    ;输出提示字符串
    mov ah,9
    int 21h
    
 input:
    mov ah,1    ;输入一个字符
    int 21h
    
    sub al,30h    ;把al中的ascii码转换成数值
    jl init
  
    cmp al,10    ;输入的数在0-9之间跳转
    jl toBin
    
    sub al,27h    ;再转换为a-f
    cmp al,0ah    ;输入的字符比a小
    jl init      ;结束输入
    cmp al,10h    ;输入的字符比f大
    jge init    ;结束输入
    
 toBin:      ;转换为二进制,把输入组合成意义上的数值
    mov cl,4    
    shl bx,cl    ;bx左移4位
    mov ah,0    
    add bx,ax    ;把输入后并从ascii码转换来的值与bx相加
    mov bin,bx    ;转换成二进制数后存到内存bin
    jmp input    ;继续输入
    
 init:        ;初始化,准备转换
   mov ax,bin    
   mov bx,10    
   mov si,4    ;循环四次,最大到万位
   
 toDec:      ;转为各个数位上的数值,如100转换为1,0,0 百位为1...
   mov dx,0    
   div bx      ;除10法得到各个位上的数值
   mov [buf+si],dl  ;余数为该位上的值,第一次循环为个位,第二次为十位...;存到内存中
   dec si      
   cmp ax,0    ;商是否为0,为0算法结束
   ja toDec
 

   lea dx,crlf      ;显示提示
   mov ah,9
   int 21h
   lea dx,msg2
   mov ah,9
   int 21h
   
 output:        ;输出内存中存放的各个数位上的数值
   inc si
   mov dl,[buf+si]
   add dl,30h      ;转为ascii
   mov ah,2
   int 21h
   cmp si,4
   jb output
   
  
  mov ah,1
  int 21h
  MOV AH,4CH
  INT 21H
CODES ENDS
  END START

       到此这篇关于汇编语言进制转换之16进制转10进制的文章就介绍到这了,更多相关汇编 16进制转10进制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 8086汇编开发环境搭建和Debug模式介绍(图文详解)

    8086汇编开发环境搭建和Debug模式介绍(图文详解)

    这篇文章主要介绍了8086汇编开发环境搭建和Debug模式介绍,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 详解汇编语言MOV指令

    详解汇编语言MOV指令

    在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,这篇文章主要介绍了汇编语言MOV指令,需要的朋友可以参考下
    2020-01-01
  • 汇编语言lea指令使用方法解析

    汇编语言lea指令使用方法解析

    这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言指令集之串处理指令讲解

    汇编语言指令集之串处理指令讲解

    这篇文章主要介绍了汇编语言指令集之串处理指令讲解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-01-01
  • 一文掌握汇编语言 halt 命令

    一文掌握汇编语言 halt 命令

    汇编 halt 命令,是一条重复执行指定标号的循环命令。处理器暂停,直到出现中断或复位信号才继续,这篇文章主要介绍了汇编语言 halt 命令,需要的朋友可以参考下
    2023-01-01
  • 汇编语言乘指令 MUL、IMUL的具体使用

    汇编语言乘指令 MUL、IMUL的具体使用

    这篇文章主要介绍了汇编语言乘指令 MUL、IMUL的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 汇编:Debug的常用命令

    汇编:Debug的常用命令

    DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段
    2023-08-08
  • 汇编语言存储及寄存器原理解析

    汇编语言存储及寄存器原理解析

    这篇文章主要介绍了汇编语言存储及寄存器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言有关在屏幕区显示字符的四种方法(推荐)

    汇编语言有关在屏幕区显示字符的四种方法(推荐)

    这篇文章主要介绍了汇编语言有关在屏幕区显示字符的四种方法(推荐),每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 汇编语言Debug命令详解教程

    汇编语言Debug命令详解教程

    这篇文章主要为大家介绍了汇编语言Debug命令的教程,文中对Debug的命令进行了全面的讲解有需要的朋友可以借鉴参考共同学习下,希望能够有所帮助
    2021-11-11

最新评论