本帖最后由 人造人 于 2017-6-25 23:08 编辑
如果说,把 call dtoc 注释,能够正常显示,那说明了什么?
assume cs:code,ds:data
data segment
; db 10 dup (0)
db 'test', 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 di
push bx
push ds
push si
push cx
push dx
push ax
mov si,0
d20:
mov di,10
mov cx,ax
jcxz d21 ;低位如果为零
push ax
mov ax,dx
mov dx,0
div di
mov bx,ax
pop ax
div di
add dx,30h
push dx
mov dx,bx
inc si
jmp d20
d21:
mov cx,dx
jcxz d22 ;高低位全部为0时,转到d22执行
jmp d20
d22:
mov di,0
mov cx,si
d23:
pop ax
mov ds:[di],al
inc di
loop d23
mov dl,0
mov [si],dl
pop ax
pop dx
pop cx
pop si
pop ds
pop bx
pop di
ret
show_str:
push ax
push cx
push si
push es
push dx
mov ax,160
mul dh
mov bx,ax
mov ax,2
mul dl
add bx,ax
mov ax,0b800h
mov es,ax
mov al,cl
mov cl,0
s2:
mov ch,[si]
jcxz output
mov es:[bx],ch
mov es:[bx+1],al
add bx,2
inc si
jmp s2
output:
pop dx
pop es
pop si
pop cx
pop ax
ret
code ends
end start
|