本帖最后由 chenhi 于 2013-10-21 03:34 编辑
调用方法: mov dh, 12 ;行号 1-25
mov dl, 30 ;列号 1-80
mov cl, 2 ;字体颜色 白色:7 蓝色:1 绿色:2 红色:4
mov bx, 0 ;自定义字符串数据在data段中的开始位置,从零开始
call far ptr show_str
实现过程:show_str: ;字符串默认在ds寄存器中
push bx
push ax
push dx
push cx
push si
push di
push es
push si
push cx
dec dh
dec dl
xor di, di
xor cx, cx
mov cl, dh
mov ax, 0b800h
jcxz cx0
s:
push cx
mov cx, ax
add cx, 0ah
mov ax, cx
pop cx
loop s
cx0:
mov es, ax
push dx
add dl, dl
xor dh, dh
mov di, dx
pop dx
pop cx
pop si
xor si, si
s1:
push cx
push ax
mov al, [bx+si]
mov byte ptr es:[di], al
inc di
mov es:[di], cl
inc si
inc di
xor cx, cx
mov cl, [bx+si]
jcxz s2 ;一旦执行会直接跳过pop cx导致栈错乱,所以在s2开始处就应pop cx
pop ax
pop cx
jmp s1
s2:
pop ax
pop cx
pop es
pop di
pop si
pop cx
pop dx
pop ax
pop bx
retf
代码递进有点多。复制到notepad++可以看清楚点、、
|