汇编语言简单小程序——ASCII码转十进制数(bcd码)

ASCII码转十进制数(bcd码)


码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创

  欢迎大家阅读我的博客,如果有错误请指正,有问题请提问,我会尽我全力改正错误回答问题。在此谢谢大家。

码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创


实验目的


(1)掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。
(2)熟悉调试程序的方法。


实验内容*重点内容*


(1)编制程序将ASCII码表示的十进制数转换为二进制数;
(2)编制程序将十进制的ASCII码转换为BCD码;


编译环境


  • 计算机系统:win10电脑virtualbox上安装win7虚拟机
  • 软件:wave6000
  • 软件模拟器:8086/86


目录


  • ASCII码转十进制数(bcd码)
    • 实验目的
    • 实验内容*重点内容*
    • 编译环境
    • 目录
    • ASCII码转十进制数
      • 一、知识点
        • (1)ASCII码表 数字部分
        • (2)流程图
        • (3)代码解析
      • 二、运行结果
        • ASCII码转十进制数
      • 三、源码
    • ASCII码转bcd码
      • 一、知识点
        • (1)流程图
        • (2)代码解析
      • 二、运行结果
        • ASCII码转BCD码
      • 三、源码

码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创

ASCII码转十进制数


一、知识点


(1)ASCII码表 数字部分

Bin(二进制) Oct(八进制) Dec(十进制) Hex(十六进制) 缩写/字符 解释
00110000 60 48 30 0 数字0
00110001 61 49 31 1 数字1
00110010 62 50 32 2 数字2
00110011 63 51 33 3 数字3
00110100 64 52 34 4 数字4
00110101 65 53 35 5 数字5
00110110 66 54 36 6 数字6
00110111 67 55 37 7 数字7
00111000 70 56 38 8 数字8
00111001 71 57 39 9 数字9


(2)流程图

Created with Raphaël 2.1.2 准备好需要的存储器 取得ASCII码 将AX中的值乘上000AH 读取一个ASCII码,加入AX AX减去0030H CX==0? 对应的值在AX中,结束程序 yes no


(3)代码解析

DATA SEGMENT
 NUM DB 30H,30H,30H,31H,39H
 DATA ENDS

  数据部分,NUM代表5位ASCII码这里分别是00019


 CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
   START:MOV AX,DATA
      MOV DS,AX

  代码段,进行数据导入


 MOV SI,OFFSET NUM;

  将NUM的位置存入SI,以便之后调用


MOV BX,000AH

  重点:将000AH赋值给BX,表示每一位数字的权重


MOV CX,0004H;

  重点:将0004H赋值给CX,记录之后循环的次数,因为输入是5个数字,所以这里循环四次。


MOV AH,00H
MOV AL,[SI] 

  将SI所存地址中的数据(也就是NUM的第一个数字)存入AL(AX寄存器的第四位)


SUB AL,30H ;

  将AL中的值减30H(根据ASCII码表,0对应编码为0x30H,1对应的编码为0x31H以此类推,所以ASCII码减去0x30H就是对应的数字)


A1: IMUL BX  ;
    ADD AL,[SI+01];
    SUB AL,30H;
    INC SI 
    LOOP A1;

循环部分

  1. 将AL的值乘上BX中的值(附权值)
  2. Al加上下一位ASCII码
  3. AL减去30H,与上一步合起来相当于加上下一位的值
  4. SI指向下一位
  5. 循环,注意循环的次数之前指定了,默认取CX中的值


二、运行结果

码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创


ASCII码转十进制数

汇编语言简单小程序——ASCII码转十进制数(bcd码)_第1张图片
  输入为 30H 30H 31H 31H 39H


汇编语言简单小程序——ASCII码转十进制数(bcd码)_第2张图片汇编语言简单小程序——ASCII码转十进制数(bcd码)_第3张图片
  输出为0077H 7*16+7=119 结果正确


三、源码

码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创

DATA SEGMENT
 NUM DB 30H,30H,30H,31H,39H
 DATA ENDS

 CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
   START:MOV AX,DATA
      MOV DS,AX
      MOV SI,OFFSET NUM;
      MOV BX,000AH
      MOV CX,0004H;
      MOV AH,00H
      MOV AL,[SI] 
      SUB AL,30H ;
   A1: IMUL BX  ;
        ADD AL,[SI+01];
        SUB AL,30H;
        INC SI 
        LOOP A1;Ñ­»·
       MOV [SI],AX
       INT 21H

      CODE ENDS
      END START   


ASCII码转bcd码


一、知识点

  BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。


(1)流程图

Created with Raphaël 2.1.2 准备好需要的存储器 取得ASCII码 将AX中的值乘上0010H 读取一个ASCII码,加入AX AX减去0030H,CX-- CX==0? 对应的值在AX中,结束程序 yes no


(2)代码解析

MOV BX,0010H

  重点:将0010H赋值给BX,表示每一位数字的权重,这是和上面程序唯一不同的地方


二、运行结果


ASCII码转BCD码

汇编语言简单小程序——ASCII码转十进制数(bcd码)_第4张图片
  输入为 30H 30H 30H 31H 39H


汇编语言简单小程序——ASCII码转十进制数(bcd码)_第5张图片汇编语言简单小程序——ASCII码转十进制数(bcd码)_第6张图片
  输出结果为0019 结果正确


三、源码

码文不易,如果帮助到您,希望您可以下载一个压缩包,与您无害,与我有益谢谢支持原创

DATA SEGMENT
 NUM DB 30H,30H,30H,31H,39H
 DATA ENDS

 CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
   START:MOV AX,DATA
      MOV DS,AX
      MOV SI,OFFSET NUM;
      MOV BX,0010H
      MOV CX,0004H;
      MOV AH,00H
      MOV AL,[SI] 

      SUB AL,30H ;
   A1: IMUL BX  ;
        ADD AL,[SI+01];
        SUB AL,30H;
        INC SI 
        LOOP A1;
       MOV [SI],AX
       INT 21H

      CODE ENDS
      END START  

码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创

你可能感兴趣的:(汇编语言,计算机基础)