|
主题 : : droc 32位的 帮忙看看 [待解决] |
回复[ 0次 ]
点击[ 280次 ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12 |
;名称:dtoc
;功能:将dwort型数据转变为表示十进制数的字符串,字符串以0位结尾符
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; ds:si指向字符串的首地址
;返回:无
assume
data segment
db 10 dup (0)
data ends
code segment
start:
mov bx,data
mov ds,bx
mov si,0
;下面的赋值是调试用的
mov ax,12666
mov dx,12666
call dtoc
mov dh,8
mov dl,3
mov cl,7
mov si,0
call show_str
dtoc:
push ax
push bx
push cx
push dx
push si
push di
xor di,di
xor bx,bx
s1:
mov cx,10
call divdw
mov bx,cx;把余数给bx
jcxz quit
add bx,30h
inc di;计数用
push bx
jmp short s1
quit:
mov cx,di
s2:
pop bx
mov ds:[si],bl
inc si
loop s2
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
divdw:
push ax
mov ax,dx
mov dx,0
div cx
;结果 dx位余数亦下一次计算的被除数的高位,ax为商
mov bx,ax;bx为高16位
pop ax
div cx; ax为低16位,dx为余数
mov cx,dx
mov dx,bx
ret
show_str:
;保护现场
push ax
push bx
push cx
push dx
push si
push di
;计算显示位置,最终ax存放最终显示位置
mov ax,0
sub dh,1
mov al,dh
mov ah,160
mul ah
mov dh,0
mov bx,ax
sub dl,1
mov al,dl
mov ah,2
mul ah
add ax,bx
;准备显示字符串
mov bx,0b800h
mov es,bx
mov di,ax
xor bx,bx
mov bl,cl
;设置字符以及字符属性
s10:
mov ch,ds:[si];ch存放字符
mov es:[di],ch
mov es:[di+1],bl;bl存放字符数形
mov cl,0
jcxz quit1
inc si
add di,2
jmp short s10
;现场恢复
quit1:
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
mov ah,4ch
int 21h
code ends
end start
帮忙看看 | | |