欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-02 15:42:46
...

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

 

更多微机实验:https://blog.csdn.net/yxp189?assign_skin=skin-yellow

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

           转载请标明出处~

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

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

 

一、实验要求和目的

  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:[email protected]
;如有问题,欢迎和我联系~
;转载请标明出处~

 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:[email protected]
;如有问题,欢迎和我联系~
;转载请标明出处~
 
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