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]
)