【微機原理 實驗】 ASCII碼錶示的十進制數、二進制數和BCD的互換編程實驗(含彙編代碼)

實驗四   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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章