對於機器來說,它是看不懂我們認為定義的數字的,必須要先轉換為人與機器的轉換協議,就是ascii碼,所以需要先轉換再顯示
這裡將用到之前兩節中用到的子函式
**如下:
assume cs:code, ds:data
data segment
db 10 dup(0)
dd 197514
data ends
code segment
start: mov bx, data
mov ds, bx
mov ax, ds:[10]
mov dx, ds:[12]
mov si, 0
call dtoc
mov dh, 8
mov dl, 3
mov cl, 2
call show_str
mov ax, 4c00h
int 21h
dtoc: push sp
push ds
push es
push bx
push cx
push bp
push si
push di
push dx
push ax
mov bp, sp ;[bp]是ax, [bp+2]是dx
mov di, 0
mov bx, [bp] ;將要顯示的數值的低位取出
mov si, [bp + 2] ;將要顯示的數值的高位取出
s1: mov ax, bx ;呼叫之前寫的子函式防止溢位問題
mov dx, si ;這裡的ax和dx分別存放資料的低位和高位
mov cx, 10 ;cx存放除數
call divdw
add cl, 30h ;處理後cx得到餘數
mov ch, 0
push cx ;在該迴圈中,push操作只進行了兩次,因為當餘數為最後乙個的時候,商已經變為零
add di, 1 ;如果是兩位數,di加了兩次
mov bx, ax ;將得到的商的低位送入bx,進行迴圈
mov si, dx ;將得到的商的高位送入si,進行迴圈
mov cx, ax ;ax中存放的是商的低位, 當商的低位為零時結束迴圈
jcxz ok1
jmp s1
ok1: mov si, 0
mov cx, di
s2: pop bx ;出棧兩次
mov ds:[si], bl
add si, 1 ;;;;;;;;;;;;;;;;;;;;;;;
loop s2
mov bl, 0h
mov ds:[si], bl
pop ax
pop dx
pop di
pop si
pop bp
pop cx
pop bx
pop es
pop ds
pop sp
retshow_str: push ax
push cx
push si
push di
push bx
push es
push dx ;用棧將行數和列數儲存起來
mov bp, sp
mov al, [bp + 1]
mov ah, 0
mov bx, 160
mul bx
mov si, ax ;做了16位乘法演算法後,dx的值已經被改變
;si中存放顯示區域的每行的首偏移位址
mov al, [bp] ;因為每個字元是用由兩個位元組組成的,所以這裡計算列數
mov bl, 2
mul bl
mov bx, ax ;bx中存放每個字元的第乙個位元組的位址
pop dx ;將上次入棧的dx出棧
mov di, 0
mov dl, cl ;將顏色資訊給dl
mov ax, 0b800h
mov es, ax
s: mov cl, ds:[di]
mov ch, 0
jcxz ok
mov es:[si + bx], cl
mov es:[si + bx + 1], dl
add bx, 2
add di, 1
jmp s
ok: pop es
pop bx
pop di
pop si
pop cx
pop ax
retdivdw: push si
push di
push ax
push dx
push cx
mov bp, sp ;[bp]是cx,[bp+2]是dx,[bp+4]是ax
mov ax, [bp + 2] ;ax存放16位除法的低位
mov dx, 0
mov bx, [bp]
div bx
mov si, ax ;si存放商
mov ax, [bp + 4]
mov bx, [bp]
div bx
mov cx, dx
mov dx, si
pop di
pop di
pop di
pop di
pop si
retcode ends
end start
這裡同樣用的是子函式的形式給出來的,主要的語句已經解釋了,需要學習者仔細看注釋,畢竟是組合語言,需要理解的部分很多,下面是執行結果:
程式中輸入的引數是197514,所以輸出是:
將數字轉換為字串
在日常程式設計中,我們經常需要將各型別的數字轉換為字串,這裡介紹幾種簡單方法。本文沒有介紹轉換的具體演算法。1.使用巨集轉換常量數字為字串 定義如下的巨集 define to string x x 則在 中就可以將各種型別的數字轉換為字串。這個巨集可以將任意的 中的字串轉換為c語言風格的字串 例 t...
將數字字串轉換為數字
將數字字串轉換為數字的方法有多種,c中有atoi,atof,sscanf函式可用,這些函式的用法可以在msdn里查到,這裡就不在多說了,現在說一種通用的轉換的方法 template bool str2value const std string str,type value,std ios base...
將字元數字轉換為數字輸出(模擬atoi)
例如 12345 轉換成12345 我們所所遇到的字串可能有以下幾種情況 include include include enum state state state invalid int my atoi char str while isspace str 跳過字元前面的空格 if str el...