dtoc
针对dtoc的简单说明:
取下十进制数的每一位转换为ASCII码入栈,然后以DS:[SI]为首地址依次出栈即可。
(取下十进制数中每一位的方法——重复除十取余数直到商为零,同时因为8位寄存器保存数值范围为0~127所以应进行除数为16位的除法,才能避免除法溢出)
针对show_str的简单说明:
是显示字符串的子程序
assume cs:code
data segment
db 10 dup (0)
data ends
code segment
start:
mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:
push si
mov di,0
s:
mov dx,0
mov bx,10;一定要16位除数,不然除法溢出
div bx
add di,1
mov cx,ax
add dx,30h
push dx
jcxz s1
jmp short s
s1:
mov cx,di
s2:
pop [si]
add si,1
loop s2
pop si
ret
show_str:
push dx
push cx
push si
push es;指向显存段地址0b800h
push bx;指向列
push di;指向行
mov si,0
mov ax,0b800h
mov es,ax
;得到起始行列,di表示行,bx表示列
mov al,160
mul dh
mov di,ax
mov bh,0
add dl,dl; 偶数位对应ASCII码
mov bl,dl
mov dl,cl
s3:
mov ch,0
mov cl,[si]
jcxz ok
mov es:[di][bx],cl
mov es:[di][bx+1],dl
add si,1
add bx,2
jmp short s3
ok:
pop si
pop cx
pop dx
pop es
pop bx
pop ax
ret
code ends
end start