MS-DOS TASMMASM 函式以十進位制格式列印 16 位數字

以十進位制格式列印 16 位無符號數

中斷服務 Int 21 / AH = 02h 用於列印數字。使用 div 指令執行
數字數字的標準轉換,被除數最初是 10 個擬合 16 位(10 4 ) 的最高功率,並且在每次迭代時被降低到更低的功率。

引數

引數按推動順序顯示。
每一個都是 16 位。

引數 描述
number 要以十進位制格式列印的 16 位無符號數
show leading zeros 如果 0 沒有列印出非重要的零,那麼它們就是。數字 0 始終列印為 0

用法

push 241
push 0
call print_dec          ;prints 241

push 56
push 1
call print_dec          ;prints 00056

push 0
push 0
call print_dec          ;prints 0

;Parameters (in order of push):
;
;number
;Show leading zeros
print_dec:
 push bp
 mov bp, sp

 push ax
 push bx
 push cx
 push dx

 ;Set up registers:
 ;AX = Number left to print
 ;BX = Power of ten to extract the current digit
 ;DX = Scratch/Needed for DIV
 ;CX = Scratch

 mov ax, WORD PTR [bp+06h]
 mov bx, 10000d
 xor dx, dx

_pd_convert:     
 div bx                           ;DX = Number without highmost digit, AX = Highmost digit
 mov cx, dx                       ;Number left to print

 ;If digit is non zero or param for leading zeros is non zero
 ;print the digit
 or WORD PTR [bp+04h], ax
 jnz _pd_print

 ;If both are zeros, make sure to show at least one digit so that 0 prints as "0"
 cmp bx, 1
 jne _pd_continue

_pd_print:

 ;Print digit in AL

 mov dl, al
 add dl, '0'
 mov ah, 02h
 int 21h

_pd_continue:
 ;BX = BX/10
 ;DX = 0

 mov ax, bx
 xor dx, dx
 mov bx, 10d
 div bx
 mov bx, ax

 ;Put what's left of the number in AX again and repeat...
 mov ax, cx

 ;...Until the divisor is zero
 test bx, bx
jnz _pd_convert

 pop dx
 pop cx
 pop bx
 pop ax

 pop bp
 ret 04h

NASM 移植

要將程式碼移植到 NASM,請從記憶體訪問中刪除 PTR 關鍵字(例如,mov ax, WORD PTR [bp+06h] 變為 mov ax, WORD [bp+06h]