【微机原理 实验】 ASCII码表示的十进制数、二进制数和BCD的互换编程实验(含汇编代码)

实验四   ASCII码表示的十进制数、二进制数和BCD的互换编程实验

 

更多微机实验:https://blog.csdn.net/yxp189/column/info/39992 

                         汇编语言-微机原理与接口技术-实验

注意未经允许,请勿转载!

           转载请标明出处~

适用课程:微机原理与接口技术(实验)

选用教材:微型计算机原理与接口技术-中国科学技术大学出版社

 

一、实验要求和目的

  1.了解汇编语言中的十进制、二进制、BCD码的表示形式;

  2.了解BCD值和ASCII值的区别

  3.了解如何查表进行数值转换及快速计算。

  4.掌握利用汇编语言进行进制转换的方法。

二、实验内容

(1)将一个用ASCII码表示的多位十进制转换为二进制,要求十进制不大于65535(16位),且输入数码为无符号数

(2)将用ASCII码表示的数字串,转化为压缩的BCD码。

三、实验提示 

(1)十进制数字串转二进制从最高位开始,重复进行“高位*10+低位”的操作,用公式表示为ΣDi×10i=((„(Dn×10+Dn-1)×10)+Dn-2)×10+„+D1)×10+D0 

(2)将ASCII码转换为压缩BCD码,将ASCII码的高4位置0,再将十位ASCII码的低4位左移至高4位,再与个位ASCII码相或。采用约定寄存器法传递参数。

 

实验代码:

1. 实验(1)

    将一个用ASCII码表示的多位十进制转换为二进制,要求十进制不大于65535(16位),且输入数码为无符号数

;Author:YXP
;CSDN:yxp189
;Email:yxp189@protonmail.com
;如有问题,欢迎和我联系~
;转载请标明出处~

 STACKS  SEGMENT   STACK   
              DW        128 DUP(?)
      STACKS  ENDS
       DATAS  SEGMENT         
        NUM1  DW        5  DUP(0)
        NUM2  DW        1  DUP(0)
        NUM3  DW        1  DUP(0)
       DATAS  ENDS
       CODES  SEGMENT   
              ASSUME    CS:CODES,DS:DATAS
      START:  MOV       AX,DATAS 
              MOV       DS,AX 
              MOV       NUM3,10
              MOV       CX,5
              MOV       SI,OFFSET NUM1
      READ1:
              MOV       AH,01H
              INT       21H
              MOV       DL,AL
              AND       DL,0FH
              AND       DH,00H
              MOV       [SI],DX
              INC       SI
              INC       SI
              LOOP      READ1
              
              CLC
              MOV       CX,5
              MOV       SI,OFFSET NUM1
         OP:
              MOV       AX,NUM2
              MUL       NUM3
              MOV       BX,AX
              MOV       AX,[SI]
              ADC       AX,BX
              MOV       NUM2,AX
              INC       SI
              INC       SI
              LOOP      OP

              MOV       AX,NUM2
              DIV       NUM3
              MOV       NUM2,AX
              
              MOV       AX,4C00H 
              INT       21H
       CODES  ENDS
              END       START

2. 实验(2)

   将用ASCII码表示的数字串,转化为压缩的BCD码。

;Author:YXP
;CSDN:yxp189
;Email:yxp189@protonmail.com
;如有问题,欢迎和我联系~
;转载请标明出处~
 
STACKS  SEGMENT   STACK     
              DW        128 DUP(?)  ;注意这里只有128个字节
      STACKS  ENDS
       DATAS  SEGMENT     
        NUM1  DB        5  DUP(0)
        NUM2  DW        1  DUP(0)
        NUM3  DW        1  DUP(0)
       DATAS  ENDS
       CODES  SEGMENT   
              ASSUME    CS:CODES,DS:DATAS
      START:  MOV       AX,DATAS  
              MOV       DS,AX
              MOV       CX,4
              MOV       BX,1
              MOV       SI,OFFSET NUM1
      READ1:
              MOV       AH,01H
              INT       21H
              MOV       DL,AL
              AND       DL,0FH
              TEST      CX,0001H
              JZ        AD
              
              OR        [BX][SI],DL
              ;INC       SI
              DEC       BX
              LOOP      READ1
              
              JMP       OUTOP
         AD:
              OR        [BX][SI],DL
              SHL       BYTE PTR[BX][SI],4
              LOOP      READ1        
      OUTOP:
              CLC        
              MOV       CX,4
              MOV       SI,OFFSET NUM1
       POUT:  MOV       AH,02H
              MOV       DL,[SI]              
              TEST      CX,0001H
              JZ        YIWEI
              AND       DL,0FH
              OR        DL,30H
              INC       SI
              INT       21H
              LOOP      POUT              
              JMP       ENDD              
      YIWEI:  AND       DL,0FH
              OR        DL,30H
              SHR       BYTE PTR[SI],4
              INT       21H
              LOOP      POUT             
              
       ENDD:
              MOV       AX,4C00H    ;退出程序
              INT       21H
       CODES  ENDS
              END       START

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值