王爽彙編語言第二版,實驗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
六、測試結果