將數值轉換爲表示十進制數的字符串

王爽彙編語言第二版,實驗10.3

 

 


一、實驗要求

編寫一個子程序,實現將一個數值轉換爲表示十進制數的字符串

 

 


二、程序接口

名稱:dtoc
功能:將word型數據轉變爲十進制數的字符串,字符串以0爲結尾符
參數:(ax) = word型數據
  ds:si指向字符串的首地址
返回:無

 

 


三、算法概述

1、可以反覆調用除法運算除以10d取餘數,直到商爲0,可以獲得十進制各位碼

     例如:

 

10 |  12666                 6

      ——————

   10 |    1266              6

        —————

       10 |  126              6

            ————

         10 | 12               2

              ———   

             10 | 1             1

                  ——

                     0

 

2、對十進制各位碼加上30h就轉換成爲了各位的ASCII值

 

 


四、實現代碼

dtoc:

       push ax                 ;保存寄存器現場

       push bx

       push cx

       push dx

       push si

      

       mov bp,0        ;字符串長度計數器

  dtoc_s:

      mov cx,10

      mov dx,0

       div cx

       push dx                 ;餘數入棧

       mov cx,dx             ;商保存到cx中,進行判斷

       inc bp

       loop dtoc_s            ;如果cx值不爲零,則轉跳

      

       mov cx,bp

       mov dx,0

 dtoc_s1:

      pop dx

      add dl,30h             ;轉換爲ASCII

      mov ds:[si],dl

      inc si

      loop dtoc_s1

     

      mov byte ptr ds:[si],0           ;向最後一位寫入一個0

     

      pop si                    ;恢復寄存器現場

      pop dx

      pop cx

      pop bx

      pop ax

     

      ret

 

 


五、測試代碼

assume cs:code

 

data segment

       db 10 dup (0)

data ends

 

stack segment

       dw 16 dup (0)

stack ends

 

code segment

start:

       mov bx,stack  ;定義棧段

       mov ss,bx

       mov sp,33

      

       mov ax,12666 ;爲調用子程序傳參

       mov bx,data

       mov ds,bx

       mov si,0

       call dtoc          ;調用子程序

      

       ;調用顯示字符串的子程序,參考http://blog.csdn.net/lingdushanke/archive/2009/12/27/5085512.aspx

       mov dh,8

       mov dl,3

       mov cl,2

       call show_str 

      

       mov ax,4c00h

       int 21h

code ends
end start

 

 


六、測試結果

發佈了35 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章