王爽汇编实验十(3)
(3)调用了(1)(2)中的函数
assume cs:code
data segment
db 16 dup (0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov ax,12666
call dtoc
mov ax,4c00h
int 21h
dtoc:;ax,ds:Si
push dx
push bx
push cx
push ax
push si
mov dx,0;divdw被除数高位=0
mov bx,0;计数
dtoc1:
mov cx,10;除数=10
call divdw
push cx
inc bx;计数+1
cmp ax,0 ;直到商=0
je dtoc2
jmp dtoc1
dtoc2:
mov cx,bx ;计数作循环
dtoc3:
pop bx ;逆序传送
add bl,30h
mov [si],bl
inc si
loop dtoc3
mov dh,8
mov dl,3
mov cl,00000010b
mov ax,data
mov ds,ax
mov si,0
call show_str
pop si
pop ax
pop cx
pop bx
pop dx
ret
divdw: ;ax,dx,cx
push si
mov si,ax
mov ax,dx
mov dx,0
div cx
push ax
mov ax,si
div cx
mov cx,dx
pop dx
pop si
ret
show_str:;[bx][di]
push ax
push dx
push es
push bx
push di
push cx
push si
mov ax,0b800h
mov es,ax
mov al,80*2
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax
mov di,0
mov dl,cl
show0:
mov ch,0
mov cl,[si]
jcxz showret
mov ch,dl
mov es:[bx][di],cx
add di,2
inc si
loop show0
showret:
pop si
pop cx
pop di
pop bx
pop es
pop dx
pop ax
ret
code ends
end start