assume cs:code,ss:stack,ds:data
data segment
db 16 dup(0)
data ends
stack segment
db 32 dup(0) ; 注:栈不要溢出
stack ends
code segment
start:
mov ax,stack ;初始化stack段、data段及子程序dtoc的参数
mov ss,ax
mov sp,32
mov ax,12666
mov cx,0ah
mov ch,0
mov dx,0
mov bx,data
mov ds,bx
mov si,0
call dtoc ;调用子程序dtoc将数据转化位字符串存储在data段中
mov dh,8 ;初始化子程序show_str的参数
mov dl,3
mov cl,2
call show_str ;调用子程序show_str显示字符串
mov ax,4c00h
int 21h
dtoc:
push ax
push dx
push cx
push bx
push si
mov si,0
mov bx,cx
qy: mov cx,bx
div cx
mov cx,ax
add dx,30h
push dx ;取余数存储到stack中
inc si ;计算数据个数
jcxz num
mov dx,0
jmp qy
num: mov cx,si
mov si,0
enter:
pop ax ;字符循环出栈录入data段
mov [si],al
inc si
loop enter
pop si
pop bx
pop cx
pop dx
pop ax
ret
show_str:
push dx
push cx
push ax
push es
push si
push di
mov si,0
mov di,0
mov ax,0b800h
mov es,ax
mov ax,0a0h
mul dh
mov di,ax
mov dh,0
add dl,dl
add di,dx
mov ch,0
mov ax,cx
fz:mov cl,[si]
jcxz ok
mov byte ptr es:[di],cl
mov byte ptr es:[di+1],al
inc si
add di,2
jmp short fz
ok:pop di
pop si
pop es
pop ax
pop cx
pop dx
ret
code ends
end start |