汇编语言进制转换之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进制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们! 

(0)

相关推荐

  • asp.net(c#)下各种进制间的轻松转换(2进制、8进制、10进制、16进制)

    其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32(string value, int fromBase): 可以把不同进制数值的字符串转换为数字,其中fromBase参数为进制的格式,只能是2.8.10及16: 如Convert.ToInt32("0010",2)执行的结果为2; Convert.ToString(int value, int toBase): 可以把一个数字转换为不同进制数值的字符串格式,其中toBase参数为进制的格式,只能是2.

  • C# VB 实现10进制 16进制之间互相转换

    方法1: 复制代码 代码如下: int d=10; d.ToString("x") //或把x改为X,,,就变成了16位的字符串了. int x=Convert.ToInt32(d.ToString("x"),16);//把16进制的字符串变回10进制的. 方法2: 复制代码 代码如下: static void Main() { int i = 446; string hex = i.ToString( "X" /* or x * ); Cons

  • javascript将16进制的字符串转换为10进制整数hex

    16进制的字符串 转换为整数 function hex2int(hex) {     var len = hex.length, a = new Array(len), code;     for (var i = 0; i < len; i++) {         code = hex.charCodeAt(i);         if (48<=code && code < 58) {             code -= 48;         } else {

  • c++10进制转换为任意2-16进制数字的实例

    废话不多说,直接上代码 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; int main() { //十进制转换为若干进制>2,<16 = int num; int n;//2-16之间 int a; int i=0; cin>>num>>n; int s[100]; if(n>=2&&n<<16

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

    使用8086汇编,输入一个16进制的数,程序把该16进制数转换为相应的10进制数输出 程序运行截图: 要实现这样一个程序,思路可以是这样的: 1.由于我们读入的键盘输入是ASCII码表示的,且输入一个字符便得到一个ASCII码,如输入ab,程序中可以得到61h和62h.现在的问题是怎么把这些输入的字符表示成一个完整的数.对于这个问题,我们可以把每次输入的字符的ASCII码先转换为对应的数,0-9之间的数,根据ASCII码表发现可以用 ASCII码减30h 得到0-9对应的十六进制数值,对于a-b

  • java 进制转换实例详解

    java 进制转换实例详解 十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinaryString(int i) 十六进制转成十进制 Integer.valueOf("FFFF",16).toString() 八进制转成十进制 Integer.valueOf("876",8).toString() 二进制转十进制 Integ

  • Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)

    使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x) Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns

  • JavaScript常用进制转换及位运算实例解析

    前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转换 按位操作符 JavaScript进制转换 手动实现进制转换 进制转换 以下使用常见的十进制和二进制转换作为例子,其他进制的转换也是大同小异,感兴趣可以自己琢磨下. 十进制转二进制 根据 "逢十进一" 的法则进行计数时,每十个相同的单位组成一个和它相邻的较高的单位,这种计数法叫做十进制计

  • 批处理bat函数:大数字加减乘除、时期时间计算、数字排序、进制转换等

    目录 计算任意位数的正整数加法 计算1000位以内的正整数减法 计算任意位数的正整数乘法 500位内整数除法函数 计算时间差 可以处理0开头的数.重复数及200位以内的超大整数(封装) 计算指定天数 前/后 的日期及星期 进制转换(函数) 1.任意进制互转 二进制转十六进制(封装)(通过4位一段转换,可处理超大数) 十六进制转二进制(封装)(通过4位一段转换,可处理超大数) 二进制转十进制(封装)(只能处理cmd范围内的数,小巧方便代码中调用) 获取10进制数(含负数)的 原码.反码.补码(未封

  • JS 实现10进制转换36进制的示例代码

    前言 我们在平时写代码的时候偶尔会碰到进制转换的问题,常见的有2进制,8进制,10进制,16进制之间的转换,但是36进制却很少听过,这里就让我们用JS来简单尝试一下36进制的实现吧 思考 36进制数的构成 在开始前,我们需要先理清楚36进制的数字组成,这样我们才能对36进制数有一个清晰的认识以及后续对数字的转化.我们都知道,16进制数是由 0-9 以及a-f 之间的字符所构成,那么36进制呢?,将 a-f 继续后推20位,显而易见,它的字母部分正好由a-z 26个英文字母构成,所以36进制数是由

  • Java实现任意进制转换

    本文实例为大家分享了Java实现任意进制转换的具体代码,供大家参考,具体内容如下 问题描述 编写程序实现任意进制间的相互转换 (一).进制转换思想 1.先把任意进制转化为十进制 2.再把十进制转化为任意进制 3.本算法结合了十以下进制利用公式转换以及十以上进制调用函数转换 (二).问题分析 1.输入当前数进制 输入当前进制 m ,且保证 m>1 public static void main (String[] args){ int l,m,n; String l16; Scanner sc =

  • JavaScript实现把rgb颜色转换成16进制颜色的方法

    本文实例讲述了JavaScript实现把rgb颜色转换成16进制颜色的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtm

  • php将字符串转换成16进制的方法

    本文实例讲述了php将字符串转换成16进制的方法.分享给大家供大家参考.具体分析如下: php中可以通过bin2hex函数将字符串转换成16进制的形式输出,bin2hex()函数返回结果为ascii码 <?php $string = "Hello\tworld!\n"; print($string."\n"); print(bin2hex($string)."\n"); ?> 输出结果如下: Hello world! 48656c6c

随机推荐